我已经能够使用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);