【问题标题】:Warning: mysqli_num_rows(): supplied argument is not a valid MySQL result [duplicate]警告:mysqli_num_rows():提供的参数不是有效的 MySQL 结果 [重复]
【发布时间】:2013-03-05 22:41:01
【问题描述】:

代码:

  $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 结果

为什么?谁能帮我解释一下?

【问题讨论】:

    标签: php mysqli mysql-num-rows procedural


    【解决方案1】:

    您应该检查函数的返回值!

    (作为一个程序员,在遇到错误的任何情况下都会这样做)

    查询似乎出了点问题。所以将代码更改为:

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

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

    【讨论】:

      【解决方案2】:

      这仅仅意味着这里传递的 $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();
      }
      

      【讨论】:

      • 对象(mysqli_stmt)#3 (0) { }
      • @JohnJr - 查看我更新的评论。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-14
      • 1970-01-01
      • 1970-01-01
      • 2011-09-22
      • 2011-04-24
      • 2011-08-21
      相关资源
      最近更新 更多