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

时间:2014-08-10 18:21:28

标签: php mysql mysqli

我已经能够使用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来说效率不高 - 这个问题主要是学术性的。

3 个答案:

答案 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)

mysqli_affected_rows

  

返回受上一次INSERT,UPDATE,REPLACE或DELETE查询影响的行数。