在生成网页时,许多PHP脚本通常都会执行除参数以外,其他部分完全相同的查询语句,针对这种重复执行一个查询,每次迭代使用不同的参数情况,MySQL从4.1版本开始提供了一种名为预处理语句(prepared statement)的机制。它可以将整个命令向MySQL服务器发送一次,以后只有参数发生变化,MySQL服务器只需对命令的结构做一次分析就够了。这不仅大大减少了需要传输的数据量,还提高了命令的处理效率。可以用mysqli扩展模式中提供的mysqli_stmt类的对象,去定义和执行参数化的SQL命令,mysqli_result类中包含的全部成员属性和成员方法如表13-6和表13-7所示。
表13-6 mysqli_stmt类中的成员方法(共12个)
成员方法名 |
描 述 |
bind_param() |
该方法把预处理语句各有关参数绑定到一些 PHP变量上,注意参数的先后顺序 |
bind_result() |
预处理语句执行查询之后,利用该方法将变量绑定到所获取的字段 |
close() |
一旦预处理语句使用结果之后,它所占用的资源可以通过该方法回收 |
data_seek() |
在预处理语句中移动内部结果的指针 |
execute() |
执行准备好的预处理语句 |
fetch() |
获取预处理语句结果的每条记录,并将相应的字段赋给绑定结果 |
free_result() |
回收由该对象指定的语句占用的内存 |
result_metadata() |
从预处理中返回结果集原数据 |
prepare() |
无论是绑定参数还是绑定结果,都需要使用 该方法准备要执行的预处理语句 |
send_long_data() |
发送数据块 |
reset() |
重新设置预处理语句 |
store_result() |
从预处理语句中获取结果集 |
表13-7 mysqli_stmt类中的成员属性(共6个)
成员属性名 |
描 述 |
$affected_rows |
返回该对象指定的最后一条语句所影响的记录数。 注意,该方法只与插入、修改和删除三种查询句有关 |
$errno |
返回该对象指定最近所执行语句的错误代码 |
$error |
返回该对象指定最近所执行语句的错误描述字符串 |
$param_count |
返回给定的预处理语句中需要绑定的参数个数 |
$sqlstate |
从先前的预处理语句中返回SQL状态错误代码 |
$num_rows |
返回stmt对象指定的SELECT语句获取的记录数 |
$stmt = $dbConnection->prepare('SELECT * FROM employees WHERE name = ?'); $stmt->bind_param('s', $name); $stmt->execute(); $result = $stmt->get_result(); while ($row = $result->fetch_assoc()) { // do something with $row }