概述
mysqli
(MySQL Improved) 是 PHP 的一个扩展,用于实现对 MySQL 数据库的访问和操作。它提供了丰富的方法和属性,使得开发者能够以面向对象的方式进行数据库编程。
1.[创建连接]:使用mysqli类中构造函数(方法),实例化数据库连接对象
__construct():构造函数,mysqli类中内置方法,初始化mysqli对象时自动调用
参数:主机名(ip)、用户名、密码、数据库名(可选)、端口号(可选)、套接字(可选)
用途:创建一个新的mysqli类的对象,使用传递参数,尝试连接数据库
可以预先定义用到的变量,也可在实例化时,直接传入原始参数
$host = '127.0.0.1';
$username = 'root';
$password = 'root';
$conn = @new mysqli($host, $username, $password);
@ :错误抑制符,如果连接失败,不显示失败提示的敏感信息
2.[检查连接]:使用if条件表达式判断,对象内connect_error属性的值,从而进行连接情况的判断
connect_error(): mysqli类,实例化成对象后的属性
属性返回值:出错时,它是一个描述错误的字符串,连接正常则为 NULL
使用if条件表达式进行属性返回值的判断
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}else{
echo 'status:ok';
}
当数据库连接报错时,对象内connect_error属性值为描述报错内容的字符串。if判断为真,执行if语句
die 函数会输出括号内的错误信息,然后终止脚本的执行
数据库连接正常时,对象内connect_error属性值为NULL。if判断为假,执行else语句。
输出状态为ok
if条件表达式如何判断
if 语句,表达式的值会被自动转换为一个布尔值,其中:
真值(truthy):任何非零的、非空的、非假的值都会被转换为 true。
假值(falsy):值为 0、0.0、""(空字符串)、null、false、NaN(非数字)、一个空数组 array() 等,都会被转换为 false。
3.[执行SQL语句,操作数据库]:使用对象内query方法,进行sql语句的执行
query():对象内置方法,用于执行sql语句,并返回对应结果
所需参数:
将SQL语句以字符串的形式进行赋值的变量,也可以是原始数据
方法返回值:
query()
方法返回的结果取决于执行的 SQL 语句类型:
-
对于返回数据集的语句(如
SELECT
,SHOW
,DESCRIBE
等),query()
返回一个mysqli_result
对象,这个对象包含了查询结果集,可以通过它来获取具体的数据行和列。 -
对于不返回数据集的语句(如
INSERT
,UPDATE
,DELETE
,DROP
等),query()
返回true
,表示语句执行成功。在这些情况下,可以使用$mysqli->affected_rows
来获取影响的行数,或者使用$mysqli->insert_id
来获取自增主键的值。 -
如果 SQL 语句执行失败,
query()
返回false
。此时,可以使用$mysqli->error
来获取错误信息,或者使用$mysqli->errno
来获取错误编号。
$sql = "SHOW DATABASES";
$result = $conn->query($sql);
var_dump($result);
使用var_dump输出结果集的简略信息,包含[索引,字段数(列数),字段的长度信息,行数,类型]
object(mysqli_result)#2 (5)
{
["current_field"]=> int(0)
["field_count"]=> int(1)
["lengths"]=> NULL
["num_rows"]=> int(17)
["type"]=> int(0)
}
失败返回:bool(false)
"current_field"
: 当前字段索引,对于SHOW DATABASES
这类查询,它通常为0
,因为查询结果不涉及字段索引。
"field_count"
: 结果集中的字段数。对于SHOW DATABASES
查询,这个值是1
,因为查询只返回一个字段,即数据库的名称。
"lengths"
: 一个数组,包含了结果集中每个字段的长度信息。对于SHOW DATABASES
查询,这个属性通常是NULL
,因为长度信息不适用。
"num_rows"
: 结果集中的行数。在你的例子中,服务器上有17
个数据库。
"type"
: 结果集的类型,对于mysqli_result
对象,这个值通常是0
,表示这是标准的mysqli_result
对象。
4.[判断查询情况并输出具体查询结果]:使用if判断结果集对象,并使用fetch方法进行while循环输出
$result:执行SQL语句后的结果集对象
fetch_assoc():结果集对象中包含的方法,用于输出结果集中每一行的内容,并将其与列名拼接成关联数组,列名为键,行具体内容为值
每次调用都输出结果集中下一行的内容,当结果集中没有可以输出的内容时,返回NULL
$row = $result->fetch_assoc()
var_dump($row);
输出结果集中第一行的内容: array(1) { ["Database"]=> string(18) "information_schema" }
if ($result) {
echo "Databases on the server:<br>";
// 输出每个数据库名称
while ($row = $result->fetch_assoc()) {
echo $row['Database'] . "<br>";
}
$conn->close()
} else {
var_dump($result);
echo'<br><hr>'; //php解释器中false会转换成0,而0在html中是不可见的
echo "Query failed: " . $conn->error;
}
循环开始:while 循环开始,调用 fetch_assoc() 尝试获取第一行数据。
获取数据:如果存在数据行,fetch_assoc() 返回一个关联数组,循环继续。
处理数据:在循环体内部,处理(通常是输出)当前行的数据。
循环继续:循环结束后再次调用 fetch_assoc() 尝试获取下一行数据。
结果集结束:当结果集中没有更多的行时,fetch_assoc() 返回 null,while 循环的条件不再满足,循环停止。
关闭结果集:在循环结束后,通常调用 $result->close() 来关闭结果集,释放资源。
使用if进行结果集对象的判断
如果sql语句执行成功,进行while循环
1.使用$row变量,接收结果集对象调用fetch_assoc方法,产生的关联数组。
2.输出具体的值,直到结果集中所有数据输出完成
3.结果集中所有数据输出完成,返回NULL传递给while循环,while循环关闭
4.调用mysqli对象中close方法关闭数据库连接
如果sql语句执行失败,结果集对象返回false
执行else语句,调用mysqli对象内error方法输出具体报错信息