【问题标题】:Help I have an error message using PHP "Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in..."帮助 我在使用 PHP 时收到一条错误消息“警告:mysql_num_rows():提供的参数不是...中的有效 MySQL 结果资源”
【发布时间】:2011-05-29 22:07:59
【问题描述】:

我正在尝试在 MySql 数据库中运行查询,但每次都会收到相同的警告。有人可以帮忙吗?

警告:mysql_num_rows():在第 279 行的 /XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/public_html/login.php 中提供的参数不是有效的 MySQL 结果资源 您提供的用户名不存在!

我已经用 ++++++++++++$num = mysql_num_rows($res);++++++++++++ 突出显示了第 279 行

请告诉我如何解决这个问题。

<?php
  //If the user has submitted the form
  if($_POST['submit']) {
    //protect the posted value then store them to variables
    $username = protect($_POST['username']);
    $password = protect($_POST['password']);

    //Check if the username or password boxes were not filled in
    if(!$username || !$password) {
      //if not display an error message
      echo "<center>You need to fill in a <b>Username</b> and a <b>Password</b>!</center>";
    } else {
      //if the were continue checking

      //select all rows from the table where the username matches the one entered by the user
      $res = mysql_query("SELECT * 
                            FROM `users` 
                           WHERE `username` = '".$username."'");
      ++++++++++++++$num = mysql_num_rows($res);++++++++++++++++++

      //check if there was not a match
      if($num == 0) {
        //if not display an error message
        echo "<center>The <b>Username</b> you supplied does not exist!</center>";
      } else {
        //if there was a match continue checking

        //select all rows where the username and password match the ones submitted by the user
        $res = mysql_query("SELECT * FROM `users` 
                             WHERE `username` = '".$username."' 
                               AND `password` = '".$password."'");
        $num = mysql_num_rows($res);

        //check if there was not a match
        if($num == 0) {
          //if not display error message
          echo "<center>The <b>Password</b> you supplied does not match the one for that username!</center>";
        } else {
                    //if there was continue checking

                    //split all fields fom the correct row into an associative array
                    $row = mysql_fetch_assoc($res);

                    //check to see if the user has not activated their account yet
                    if($row['active'] != 1){
                        //if not display error message
                        echo "<center>You have not yet <b>Activated</b> your account!</center>";
                    }else{
                        //if they have log them in

                        //set the login session storing there id - we use this to see if they are logged in or not
                        $_SESSION['uid'] = $row['id'];
                        //show message
                        echo "<center>You have successfully logged in!</center>";

                        //update the online field to 50 seconds into the future
                        $time = date('U')+50;
                        mysql_query("UPDATE `users` SET `online` = '".$time."' WHERE `id` = '".$_SESSION['uid']."'");

                        //redirect them to the usersonline page
                        header('Location: usersOnline.php');
                    }
                }
            }
        }
    }

    ?>

【问题讨论】:

标签: php mysql sql


【解决方案1】:

我不确定保护功能在做什么,但您可以这样做:

$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);

在您的查询中,为了调试,使用它来获得正确的错误

$res = mysql_query("SELECT * 
                  FROM `users` 
                  WHERE 
                     `username` = '$username' 
                  AND 
                     `password` = '$password'") or die('Error: '.mysql_error());

【讨论】:

    【解决方案2】:

    您的查询可能失败。如果发生错误,mysql_query() 返回false。使用mysql_error() 找出真正的问题。

    $res = mysql_query("SELECT * FROM `users` WHERE `username` = '".$username."'");
    if ($res === false) {
        echo mysql_errno() . ': ' . mysql_error();
        exit;
    }
    $num = mysql_num_rows($res);
    

    【讨论】:

    • 只是告诉我 1146:表 'XXXXXXXXXXXXXXXXXXXX.users' 不存在
    • 那么表XXXXXXXXXXXXXXX.users 可能不存在。现在由您来创建它(等等)。
    【解决方案3】:

    $username 可能包含特殊字符吗?如果您的查询从数据库的角度正确执行,您应该检查 mysql 日志。

    【讨论】:

      【解决方案4】:

      正如 mysql_query() 的 documentation 所说:

      对于选择、显示、描述、解释 和其他语句返回 结果集,mysql_query() 返回一个 成功的资源,或 FALSE 错误。

      所以只需检查一下,您在连接的数据库中是否有此表、列出的列以及您的查询是否正常 - 这可能只是您的查询错误。

      文档中有示例(请参阅开头的链接),如何查看实际发生的情况(请参阅示例 #1;替换为您自己的查询):

      $result = mysql_query('SELECT * WHERE 1=1');
      if (!$result) {
          die('Invalid query: ' . mysql_error());
      }
      

      【讨论】:

        猜你喜欢
        • 2023-03-31
        • 2011-09-22
        • 2013-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-08
        • 2011-04-11
        相关资源
        最近更新 更多