面向对象
和面向过程
这两种方式,而面向对象更加直观,所以这里只使用面向对象的方式。$conn = new mysqli("主机地址", "用户名", "密码" [, "数据库名" ]);
if ($conn->connect_error) {
die("连接失败,原因:". $conn->connect_error);
}
echo "连接成功";
$conn->close(); // 最后要记得关闭连接
use 数据库名
切换到对应数据库$sql = "SQL语句";
if ($conn->query($sql) === TRUE)
echo "执行成功";
else
echo "执行失败,原因:" . $con->error;
$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]}
";
}
// fetch_row 方法
while($row = $result->fetch_row()){
echo "${row[0]} ${row[1]} ${row[2]}
";
}
// fetch_assoc 方法
while($row = $result->fetch_assoc()){
echo "${row['name']} ${row['age']} ${row['grade']}
";
}
$result->num_rows
:结果集行数$result->field_count
:结果集列数预处理语句可以防止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
参数类型:
$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
"
}
// 释放结果集
$statement->free_result();
$statement->close();
如图,在数据库“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
";
$statement2->free_result();
$statement2->close();
// 关闭连接
$conn->close();
结果: