我已经能够使用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来说效率不高 - 这个问题主要是学术性的。
答案 0 :(得分:1)
如果你这样做,你会得到什么?
echo $stmt->num_rows;
您不能对SELECT语句使用受影响的行方法!
答案 1 :(得分:1)
此函数(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);
答案 2 :(得分:1)
返回受上一次INSERT,UPDATE,REPLACE或DELETE查询影响的行数。