复制代码 代码如下:
$mysqli = new mysqli("localhost","root","","mydb");
?>
建立一个数据库连接需要四个参数,分别为数据库地址、数据库访问用户名、数据库访问密码、数据库名称。除了使用上面的mysqli对象的构造方法建立数据库连接外,还可以调用其connect方法建立数据库的连接。
复制代码 代码如下:
$mysqli = new mysqli();
$mysqli->connect("localhost","root","","mydb");
?>
还可以通过mysqli对象的构造方法建立数据连接,通过select_db方法指定要访问的数据库。
复制代码 代码如下:
$mysqli = new mysqli("localhost","root","");
$mysqli->select_db("mydb");
?>
通过mysqli对象的errno属性获取当前连接的错误号,如果当前连接没有任何错误,错误号返回为0。
复制代码 代码如下:
$mysqli = new mysqli("localhost","root","");
$mysqli->select_db("mydb");
if($mysqli->errno == 0) //判断当前连接是否成功
{
}
else
{
echo "The Connection is Error!";
exit();
}
?>
当然可以通过mysqli对象的error属性获取当前连接的错误信息,如果没有错误,返回“”。
复制代码 代码如下:
$mysqli = new mysqli("localhost","rootsss","");
$mysqli->select_db("mydb");
if($mysqli->errno == 0) //判断当前连接是否成功
{
}
else
{
echo $mysqli->error; //输出当前错误信息
exit();
}
?>
2.查询数据库
查询数据库可以使用mysqli对象的query方法,该方法返回查询数据库的结果集。
语法为:$mysqli->query(查询语句,查询模式);
查询模式有两种:
① MYSQLI_STORE_RESULT。将结果作为一个缓存集进行返回,这说明可以立即对整个结果集进行导航。该设置为默认设置。结果集查询出来后就放入内存中,这就代表如果结果集内数据量很大则会占用较多的内存。但是利用这种方式我们可以很容易知道一个查询返回了多少行记录或希望立即跳到结果集的某一行。
② MYSQLI_USE_RESULT。将结果集作为一个非缓存集返回。这就代表会根据需要从数据库服务器获取结果集,对于较大的结果集数据这样做可以提高性能。但是会导致很多对结果集的操作受到限制,比如获取查询行数等。
复制代码 代码如下:
$mysqli = new mysqli("localhost","root","");
$mysqli->select_db("mydb");
if($mysqli->errno == 0) //判断当前连接是否成功
{
$sql = "SELECT * FROM student";
$result = $mysqli->query($sql);
echo "Result row nums:".$result->num_rows."
"; //显示结果集数量
//迭代结果集
while(list($id,$name,$age,$address) = $result->fetch_row())
{
echo "$id : $name : $age : $address"."
";
}
}
else
{
echo $mysqli->error; //输出当前错误信息
exit();
}
?>
使用结果集对象的fetch_row方法获取结果集中每一行数据,每一行数据为一个关联数组,并使用list方法将其中的每个数据进行输出。还可以使用输出对象的方式将结果集中的每一行进行输出。
复制代码 代码如下:
$mysqli = new mysqli("localhost","root","");
$mysqli->select_db("mydb");
if($mysqli->errno == 0) //判断当前连接是否成功
{
$sql = "SELECT * FROM student";
$result = $mysqli->query($sql);
echo "Result row nums:".$result->num_rows."
"; //显示结果集数量
//迭代结果集
while($rowObject = $result->fetch_object())
{
echo "$rowObject->id : $rowObject->name : $rowObject->age : $rowObject->address"."
";
}
}
else
{
echo $mysqli->error; //输出当前错误信息
exit();
}
?>
其中使用fetch_object方法将每一行中的数据封装为一个对象,在上面的例子中该对象为$rowObject,数据库中每一列成为该对象的属性,通过该对象调用其属性名称就可以获取对应的字段值。比如获取学生姓名$rowObject->name。
还可以使用fetch_array方法将每一行数据返回为一个关联数组或是一个索引数组,或者同时返回关联数组和索引数组。fetch_array方法的模式参数来指定当前返回数组的模式:
① MYSQLI_ASSOC。返回关联数组,key为字段名,value为字段值。
② MYSQLI_NUM。返回索引数组,返回顺序和查询字段顺序相同。
③ MYSQLI_BOTH。同时返回关联数组和索引数组。默认设置。
复制代码 代码如下:
while($row = $result->fetch_array(MYSQLI_ASSOC)) //返回关联数组
{
echo $row['id']. $row['name'].$row['age'].$row['address']."
";
}
?>
或
复制代码 代码如下:
while($row = $result->fetch_array(MYSQLI_NUM)) //返回索引数组
{
echo $row[0]. $row[1].$row[2].$row[3]."
";
}
?>
3.释放内存
如果结果集中数据量巨大并且已经使用完毕后,结果集对象的free方法用于释放结果集占用的内存。一旦调用了free方法,结果集将不再可用。
复制代码 代码如下:
...
$result->free(); //释放内存
?>
4.添加、修改和删除操作
使用mysqli对象的query方法依然可以进行对数据库的添加、修改和删除操作,只不过是SQL语句的不同而已。我们以添加数据为例:
复制代码 代码如下:
$mysqli = new mysqli("localhost","root","");
$mysqli->select_db("mydb");
if($mysqli->errno == 0) //判断当前连接是否成功
{
$sql = "INSERT INTO student(id,name,age,address) VALUES('8','kay','23','xian')";
$result = $mysqli->query($sql);
echo $mysqli->affected_rows; //输出影响的行数
}
else
{
echo $mysqli->error; //输出当前错误信息
exit();
}
?>
调用mysqli对象的affected_rows属性可以获取影响的行数。
5.关闭数据库连接
当一个数据库连接使用完毕后调用mysqli对象的close方法将其关闭。
复制代码 代码如下:
...
$mysqli->close();
?>
6.使用绑定参数
在PHP中的绑定参数和Java中的预处理SQL是相同的原理,当反复执行一个SQL时,SQL的参数不定时可以使用绑定参数方式可以提升SQL的执行速度.
复制代码 代码如下:
$mysqli = new mysqli("localhost","root","");
$mysqli->select_db("mydb");
if($mysqli->errno == 0) //判断当前连接是否成功
{
$sql = "INSERT INTO student(id,name,age,address) VALUES(?,?,?,?)";
$stmt = $mysqli->stmt_init(); //创建预处理对象
$stmt->prepare($sql); //对SQL进行预处理
$stmt->bind_param("isis",$id,$name,$age,$address); //设置绑定的变量 第一个参数为变量的数据类型
for($i = 12;$i{
$id = $i + 1;
$name = "樊凯";
$age = 23;
$address = "xian";
$stmt->execute(); //执行SQL语句
}
echo $mysqli->affected_rows; //输出影响的行数
$stmt->close(); //释放预处理对象占用的内存
$mysqli->close(); //关闭数据库连接
}
else
{
echo $mysqli->error; //输出当前错误信息
exit();
}
?>
需要注意的是bind_param方法的第一个参数,该参数指定了后面的变量的数据类型,这些数据类型如下所示:
① i : 所有的Integer类型。
② d : 所有的double和float类型。
③ b : Blob类型。
④ s : 其他数据类型包括字符串。
7.结果绑定
结果绑定用于将查询结果和一些变量进行绑定。
复制代码 代码如下:
$mysqli = new mysqli("localhost","root","");
$mysqli->select_db("mydb");
if($mysqli->errno == 0) //判断当前连接是否成功
{
$sql = "SELECT * FROM student";
$stmt = $mysqli->stmt_init(); //创建预处理对象
$stmt->prepare($sql); //对SQL进行预处理
$stmt->bind_result($id,$name,$age,$address); //将查询结果字段绑定到变量中
$stmt->execute(); //执行SQL语句
while($stmt->fetch()) //fetch方法用于获取结果集中的每一行,并将相应字段值赋给变量
{
echo "$id : $name : $age : $address"."
";
}
$stmt->close(); //释放预处理对象占用的内存
$mysqli->close(); //关闭数据库连接
}
else
{
echo $mysqli->error; //输出当前错误信息
exit();
}
?>

PHPSession失效的原因包括配置错误、Cookie问题和Session过期。1.配置错误:检查并设置正确的session.save_path。2.Cookie问题:确保Cookie设置正确。3.Session过期:调整session.gc_maxlifetime值以延长会话时间。

在PHP中调试会话问题的方法包括:1.检查会话是否正确启动;2.验证会话ID的传递;3.检查会话数据的存储和读取;4.查看服务器配置。通过输出会话ID和数据、查看会话文件内容等方法,可以有效诊断和解决会话相关的问题。

多次调用session_start()会导致警告信息和可能的数据覆盖。1)PHP会发出警告,提示session已启动。2)可能导致session数据意外覆盖。3)使用session_status()检查session状态,避免重复调用。

在PHP中配置会话生命周期可以通过设置session.gc_maxlifetime和session.cookie_lifetime来实现。1)session.gc_maxlifetime控制服务器端会话数据的存活时间,2)session.cookie_lifetime控制客户端cookie的生命周期,设置为0时cookie在浏览器关闭时过期。

使用数据库存储会话的主要优势包括持久性、可扩展性和安全性。1.持久性:即使服务器重启,会话数据也能保持不变。2.可扩展性:适用于分布式系统,确保会话数据在多服务器间同步。3.安全性:数据库提供加密存储,保护敏感信息。

在PHP中实现自定义会话处理可以通过实现SessionHandlerInterface接口来完成。具体步骤包括:1)创建实现SessionHandlerInterface的类,如CustomSessionHandler;2)重写接口中的方法(如open,close,read,write,destroy,gc)来定义会话数据的生命周期和存储方式;3)在PHP脚本中注册自定义会话处理器并启动会话。这样可以将数据存储在MySQL、Redis等介质中,提升性能、安全性和可扩展性。

SessionID是网络应用程序中用来跟踪用户会话状态的机制。1.它是一个随机生成的字符串,用于在用户与服务器之间的多次交互中保持用户的身份信息。2.服务器生成并通过cookie或URL参数发送给客户端,帮助在用户的多次请求中识别和关联这些请求。3.生成通常使用随机算法保证唯一性和不可预测性。4.在实际开发中,可以使用内存数据库如Redis来存储session数据,提升性能和安全性。

在无状态环境如API中管理会话可以通过使用JWT或cookies来实现。1.JWT适合无状态和可扩展性,但大数据时体积大。2.Cookies更传统且易实现,但需谨慎配置以确保安全性。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

SublimeText3 Linux新版
SublimeText3 Linux最新版

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能