【问题标题】:ERROR: Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\...\....php on line 19 [duplicate]错误:警告:mysql_num_rows() 期望参数 1 是资源,在第 19 行的 C:\xampp\htdocs\...\....php 中给出的布尔值 [重复]
【发布时间】:2011-08-28 01:52:15
【问题描述】:

我不断收到使用mysql_num_rows() 的错误消息,你能帮我找出我的代码出了什么问题吗?

这是我的代码:

<?php 
//check if the user press submit
if (isset($_POST['submit'] )) {

    $customer = preg_replace('#[^A-Za-z0-9]#i', '', $_POST["username"]); // filter everything but numbers and letters
    $password = preg_replace('#[^A-Za-z0-9]#i', '', $_POST["password"]); // filter everything but numbers and letters

    $sql = mysql_query("SELECT id FROM members WHERE username='$customer' AND password='$password' LIMIT 1"); // query the person
    // ------- MAKE SURE PERSON EXISTS IN DATABASE ---------
    $existCount = mysql_num_rows($sql); // count the row nums
    if ($existCount == 1) { // evaluate the count
         while($row = mysql_fetch_array($sql)){ 
             $id = $row["id"];
         }
         $_SESSION["id"] = $id;
         $_SESSION["customer"] = $customer;
         $_SESSION["password"] = $password;
         header("location: index.php");
         exit();
    } else {
        echo 'That information is incorrect, try again <a href="customer_login.php">Click Here</a>';
        exit();
    }
}
?>

我已经按照您的建议尝试了mysql_errno().. 它回显了 1146

当我搜索该错误时,它会说

1146: Table 'kossu.nonexistenttable' doesn't exist

但我不知道这是什么意思...请帮忙。

【问题讨论】:

  • $sql 可能是错误的,这就是它失败的原因。检查查询是否正确。
  • 您的 sql 语法可能有错误,mysql_query 返回 false。打印出整个查询并将其粘贴到 phymyadmin(或类似的)中,看看它是否正确执行。
  • @AllisonC 我在 mysql 尝试了 sql 语法,它成功返回了 id。
  • 阅读下面的任意答案,然后使用mysql_error() 找出您的查询到底发生了什么。无需猜测。

标签: php


【解决方案1】:

可能mysql_query() 失败了。在这种情况下,它返回false。使用mysql_error() 了解会发生什么。

【讨论】:

  • 嗨 KingCrunch 我尝试按照您的建议回显 mysql_error(),它回显 1146,当我搜索它的含义时,它说 1146:表 'kossu.nonexistenttable' 不存在,你能帮我吗,因为我真的不知道这是什么意思...我也尝试了 $sql 到 mysql 的语法,它成功地刷新了列 id 请帮助thanx
  • @iamanaprentice:我真的不知道,我应该多说什么。表kossu.nonexistenttable 不存在。我想,这真的很明显,这是什么意思。在您的情况下,似乎没有表 members 可供查询。另外我说mysql_error() 而不是mysql_errno()。使用第一个,您将收到具体的错误消息,而不是不特定的错误代码。这比您从 PHP 手册中获取的示例输出更有用;)
  • @KingCrunch... 非常感谢,因为 mysql_error() 我发现我的数据库在我的连接代码处拼写错误:) 再次感谢
【解决方案2】:

当出现错误时,mysql_query() 返回false 而不是资源对象。在传递给mysql_num_rows()之前检查mysql_query()的返回值。

【讨论】:

    【解决方案3】:

    来自the docs

    返回值

    对于 SELECT、SHOW、DESCRIBE、EXPLAIN 和其他返回结果集的语句,mysql_query() 成功时返回资源,错误时返回 FALSE。

    所以,你有一个错误。使用mysql_error() 找出答案。

    【讨论】:

      【解决方案4】:

      mysql_query() 失败。它返回false。要查看错误,请使用mysql_error()

      【讨论】:

        【解决方案5】:

        您可能没有选择正确的数据库。之前遇到过这样的问题,报错是我选择的数据库。

        【讨论】:

          【解决方案6】:

          当 MySQL 查询被执行时,它应该返回查询结果。如果查询未成功执行,则返回False。您的查询似乎失败了,所以它返回了False。当您尝试将带有mysql_num_rows() 的行计数到失败的查询中时,它肯定会返回错误。您的查询可能有错误。请检查。

          【讨论】:

            【解决方案7】:

            原因可能是 SQL 查询使用了不正确的数据库。使用完全限定的表名,即databaseName.tableName

            在你的情况下:

            $sql = mysql_query("SELECT id FROM DBName.members WHERE username='$customer' AND password='$password' LIMIT 1"); 
            

            其中“DBName”是您的数据库名称。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2012-12-20
              • 2016-12-02
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多