【发布时间】:2017-07-03 14:27:46
【问题描述】:
这是我在网上找到的标准代码,用于在使用 mysqli 准备好的语句时蚀刻数据:
$sql = "SELECT Title, CopyrightYear FROM Books WHERE ID=?";
if ($statement = mysqli_prepare($connection, $sql)) {
mysqli_stmt_bindm($statement, 'i', $id);
mysqli_stmt_execute($statement); //Question 1
mysqli_stmt_bind_result($statement, $title, $year);
while (mysqli_stmt_fetch($statement)) { //Question 2
echo $title . '-' . $year . '<br/>';
}
}
我有一些问题:
- 为什么我们不存储mysqli_stmt_execute的结果?我们可以使用类似的东西:
$result = mysqli_stmt_execute($statement);那么我们可以从结果集中检索每条记录吗?
- 既然我们已经执行了查询,那么
mysqli_stmt_fetch($statement)是什么意思呢?我们不是已经执行了$statement,不应该是这样吗:mysqli_stmt_fetch($result)?
【问题讨论】:
-
mysqli_stmt_bindm()????? -
prepare将查询发送到数据库进行编译和优化。它实际上并没有运行查询显然因为它有一个?参数需要在查询实际完成之前绑定 -
execute运行查询,但不返回查询执行生成的结果集 -
fetch每次调用时都会从结果集中获取一行 -
如果您查找 mysqli_stmt_execute,您会看到它返回一个布尔值,而不是结果集 mysqli_stmt_execute。
标签: php mysql mysqli prepared-statement