MySql预处理语句不适用于SELECT,但适用于所有其他语句

时间:2015-02-26 00:54:34

标签: php mysql prepared-statement parameterized-query

我在SO

找到了同样的问题

Prepared statement works for INSERT but not for SELECT

并尝试遵循它,但没有运气。还有一件事,那个问题在OOP结构上,但我的问题是procedural style

这是我的代码

$stmt = mysqli_stmt_init($connect_dude);

if(mysqli_stmt_prepare($stmt,"SELECT headx FROM main_page WHERE user_id=?")){

  mysqli_stmt_bind_param($stmt, "i", $idx);
  mysqli_stmt_execute($stmt);
  mysqli_stmt_bind_result($stmt, $head);
  printf("Number of rows: %d.\n", mysqli_stmt_num_rows($stmt));

  ...................
  ...................
}

它显示Number of rows:0应该是1。这就是原因,我无法从fetch data继续database。我尽力解决问题但是无法做到。

非常感谢你的帮助。

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

我已经弄清楚了。

需要使用mysqli_stmt_store_result($stmt)

mysqli_stmt_bind_param($stmt, "i", $idx);
mysqli_stmt_execute($stmt);
mysqli_stmt_store_result($stmt);
printf("Number of rows: %d.\n", mysqli_stmt_num_rows($stmt));

给了我Number of rows:1

截至php.net

You must call mysqli_stmt_store_result() for every query that successfully produces a result set (SELECT, SHOW, DESCRIBE, EXPLAIN)

<强> BUT

不必UPDATEDELETEINSERT

谢谢大家。