在PHP中使用mysqli的“ SELECT”命令的准备好的语句失败

我已经能够使用mysqli(在PHP中)执行多个准备好的语句.
但是,由于某些原因,当我尝试运行“ SELECT”命令时,准备好的语句始终会遇到错误.
例如,以下行将成功:

$stmt=$mysqli->prepare("UPDATE events SET category='m' WHERE id=(?)");

但是,以下行将失败:

$stmt=$mysqli->prepare("SELECT * FROM events WHERE id=(?)");

当我说失败时,我的意思是接下来的三行将为UPDATE命令返回1(指示一行已更改)…

$stmt->bind_param('i',$id);
$stmt->execute();
echo $stmt->affected_rows;

接下来的三行将为SELECT返回0:

$stmt->bind_param('i',$id);
$stmt->execute();
echo $stmt->num_rows;

作为记录,我知道对于单个SELECT而言,准备好的语句效率不高-这个问题主要是学术性的.

解决方法:

此函数(affected_rows)仅适用于更新表的查询.为了从SELECT查询中获取行数,请改用mysqli_stmt_num_rows().

http://php.net/manual/en/mysqli-stmt.affected-rows.php

确保先存储结果!!

$stmt->execute();

/* store result */
$stmt->store_result();

printf("Number of rows: %d.\n", $stmt->num_rows);
上一篇:PHP-MySQL查询从10,000个数据中检索速度太慢(查询优化)


下一篇:php-更新查询在mysql中引发错误