MySql准备的语句不适用于SELECT,但适用于所有其他语句


MySql prepared statement is not working for SELECT,but works for all other statement

我在SO 上发现了同样的问题

Prepared语句适用于INSERT,但不适用于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的位置。这就是为什么,我不能从database继续到fetch data。我尽力解决了这个问题,但没能解决。

非常感谢您的帮助。

谢谢你抽出时间。

我已经想通了。

需要使用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)

但是

对于UPDATEDELETEINSERT,不必。

谢谢大家。