说明
- PHP 连接 MySQL ,通常使用 MySQLi 或 PDO 扩展,由于 MySQLi 更加简单,所以这里只使用MySQLi。
- MySQLi 连接数据库有
面向对象
和面向过程
这两种方式,而面向对象更加直观,所以这里只使用面向对象的方式。
1、创建连接
$conn = new mysqli("主机地址", "用户名", "密码" [, "数据库名" ]);
if ($conn->connect_error) {
die("连接失败,原因:". $conn->connect_error);
}
echo "连接成功";
$conn->close(); // 最后要记得关闭连接
注意
- 数据库名是可选的,如果不填写数据库名,也可以在后面利用SQL语句
use 数据库名
切换到对应数据库
2、执行SQL语句
$sql = "SQL语句";
if ($conn->query($sql) === TRUE)
echo "执行成功";
else
echo "执行失败,原因:" . $con->error;
3、执行SQL查询语句
$sql = "SQL查询语句";
$result = $conn->query($sql); // $result为查询结果集
说明
获得查询结果主要有三种方法:
$result -> fetch_all()
:取出所有数据,每行是一个普通数组,只能通过index
访问$result -> fetch_row()
:取出一行,作为普通数组,只能通过index访问,如果为空结果为FALSE$result -> fetch_assoc()
:取出一行,作为关联数组,只能通过key访问,如果为空结果为FALSE
$sql = "SQL查询语句";
$result = $conn->query($sql); // $result为查询结果集
// fetch_all 方法
$list = $result->fetch_all();
foreach($list as $row){
echo "${row[0]} ${row[1]} ${row[2]}<br>";
}
// fetch_row 方法
while($row = $result->fetch_row()){
echo "${row[0]} ${row[1]} ${row[2]}<br>";
}
// fetch_assoc 方法
while($row = $result->fetch_assoc()){
echo "${row['name']} ${row['age']} ${row['grade']}<br>";
}
补充
$result->num_rows
:结果集行数$result->field_count
:结果集列数
4、预处理语句
预处理语句可以防止SQL注入,使操作SQL更加安全。
使用预处理语句插入数据
// 预处理
$statement = $conn->prepare("INSERT INTO tab (name, age, grade) VALUES (?, ?, ?)");
// 绑定参数,被绑定的变量在之前不需要声明
$statement->bind_param("sii", $name, $age, $grade);
/*
第一个参数代表了后面被绑定变量的类型,与后面的变量一一对应
如:
- s 代表 string,与$name对应
- i 代表 integer,与$age对应
- i 代表 integer,与$grade对应
*/
// 执行
$name = "小明";
$age = 12;
$grade = 98;
$statement->execute();
$statement->close(); // 最后,要关闭statement
参数类型:
- i - integer
- d - double
- s - string
- b - BLOB(binary large object)
使用预处理语句查询数据
$grade = 60;
$statement = $conn->prepare("SELECT * FROM tab WHERE grade >= ?");
$statement->bind_param("i", $grade);
// 绑定结果集
$statement->bind_result($Name, $Age ,$Grade);
$statement->execute();
while($statement->fetch()){
echo "$Name :$Grade <br>"
}
// 释放结果集
$statement->free_result();
$statement->close();
5、示例
如图,在数据库“test”下有一张表“tab”
表“tab”的数据如下所示:
$conn = new mysqli("localhost", "root", "" , "test");
// 设置编码为 UTF-8
$conn->query("set names 'utf8'");
// 插入一条数据
$statement = $conn->prepare("INSERT INTO tab (name, age, grade) VALUES (?, ?, ?)");
$statement->bind_param("sii", $name, $age, $grade);
$name = "小亮";
$age = 12;
$grade = 60;
$statement->execute();
$statement->close();
// 查询数据
$sName = "小亮";
$statement2=$conn->prepare("SELECT * FROM tab WHERE name = ?");
$statement2->bind_param("s", $sName);
$statement2->bind_result($rName, $rAge ,$rGrade);
$statement2->execute();
$statement2->fetch();
echo "$rName $rAge $rGrade<br>";
$statement2->free_result();
$statement2->close();
// 关闭连接
$conn->close();
结果: