警告:mysqli_num_rows():提供的参数不是有效的MySQL结果

时间:2013-03-05 22:41:01

标签: php mysqli mysql-num-rows procedural

代码:

  $stmt = mysqli_prepare($link, "SELECT * FROM adm_users WHERE users_username = ? AND users_password = ?");
  mysqli_stmt_bind_param($stmt, 'ss', $user_adm_name, $user_adm_password);
  mysqli_stmt_execute($stmt);
  mysqli_stmt_store_result($stmt);
  mysqli_stmt_fetch($stmt);
  $adm_check_log = mysqli_num_rows($stmt);
  mysqli_stmt_close($stmt);

返回:

  

警告:mysqli_num_rows():提供的参数不是有效的MySQL   结果

为什么呢?有人可以帮我解释一下吗?

2 个答案:

答案 0 :(得分:0)

您应该检查功能的返回值!

(作为程序员在遇到错误的每种情况下都会这样做)

似乎查询出了问题。因此,将代码更改为:

$result = mysqli_query(...);

if(!$result) {
    die(mysqli_error($link);
}

对您正在使用的所有mysqli函数执行相同的操作。

答案 1 :(得分:0)

这仅仅意味着在这里传递的$ stmt的值:

$adm_check_log = mysqli_num_rows($stmt);

的类型不正确。通常它表示您未从查询中返回任何内容,或者出现错误。

尝试输出它以查看您获得的内容:

var_dump($stmt);

用你更换你拥有的东西。报告了什么错误?

if($stmt = mysqli_prepare($link, "SELECT * FROM adm_users WHERE users_username = ? AND users_password = ?")) {
  $stmt->bind_param("ss", $user_adm_name, $user_adm_password);
  $stmt->execute();
  printf("Error: %d.\n", $stmt->error);
  $stmt->bind_result($foo);
  $stmt->fetch();
  var_dump($foo);
  $stmt->close();
}