警告:mysql_num_rows()期望参数1是资源。怎么解决这个警告?

时间:2013-10-29 11:28:50

标签: php

我已经创建了一个登录表单,我希望用户可以更改我创建的密码,如下所示

if(isset($_SESSION['user_name']))
{
    $password=$_POST['new_password'];
    $query="select * from login where  username = '$_SESSION[user_name]' and password='" . md5($_SESSION['password']) . "'  ";
    echo $query;
    $result=mysql_query($query);
    //echo "abc";
    if(mysql_num_rows($result))
    {   
        $row=mysql_fetch_array($result);
        $pass=$row['password'];
        if($pass==$password)
        {
            $query2="UPDATE login SET password='$password' WHERE username='$_SESSION[user_name]'";
            echo $query2;
            echo "Password changed successfully";
        }
        else
        {
            echo "You entered wrong current password";
        }
    }

}

但是警告mysql_num_rows()期望参数1是资源。即将上线“if(mysql_num_rows($ result))”。那是什么解决方案?

4 个答案:

答案 0 :(得分:0)

改变这个:

 $query="select * from login where  username = '$_SESSION[user_name]' and password='" . md5($_SESSION['password']) . "'  ";

要:

$query="select * from login where  username = '".$_SESSION['user_name']."' and password='" . md5($_SESSION['password']) . "'  ";

答案 1 :(得分:0)

您的查询($ query)失败,因此没有生成查询资源,因为引号'".$_SESSION[user_name]."'

答案 2 :(得分:0)

在您的情况下,

$result可能包含资源和false 您收到false后会看到此消息,表示您的查询失败 简单的解决方案是添加检查

if ($result){
  if(mysql_num_rows($result))
  ...
} else {
  // FIXME: Handle this exception
  echo("Query has failed");
}

此外,您应该知道不推荐使用mysql_query。 考虑切换到MySQLiPDO_MySQL

More reading

答案 3 :(得分:0)

使用:

$result = mysql_query($query) or die(mysql_error());

同样 mysql _ * 函数已弃用。您应该使用 pdo mysqli

有关详细信息,请参阅 Why shouldn't I use mysql_* functions in PHP?