警告:mysql_fetch_assoc()期望参数1是资源,给定对象

时间:2011-12-15 14:22:37

标签: php mysql

  

可能重复:
  PHP Error: mysql_fetch_array() expects parameter 1 to be resource, boolean given

我似乎无法弄清楚我做错了什么。因此,当我提交表单时,我收到警告错误和

  

注意:未定义的变量:第30行/Library/WebServer/Documents/ArturoLuna_Final/loginCheck.php中的dbusername

$username = $_POST['username'];
$password = $_POST['password']; 

if($username&&$password)
{
    require 'conn.php';
    $query = "SELECT * FROM  users WHERE username='$username'";
    $result = $mysql->query($query) or die(mysqli_error($mysql));
    $numrows = $result->num_rows;

    if ($numrows!=0)
    {
        while($row = mysql_fetch_assoc($result))
        { 
            $dbusername = $row['username'];
            $dbpassword = $row['password']; 
        }

        //check to see if they match!
        if($username==$dbusername&&$password==$dbpassword)
        { 
            echo "youre In!";
        }
        else
        echo "incorrect password!";

    }
    else
        die("that user is dead");

    //echo $numrows;

}

else

    echo ("Please Enter Username")

我可能做错了什么?

2 个答案:

答案 0 :(得分:12)

更改

while($row = mysql_fetch_assoc($result))

while($row = $result->fetch_assoc())

您错过了函数名i,并混淆了OO和程序样式代码,因此您混合了mysql_*结果资源和mysqli_result个对象。

答案 1 :(得分:6)

您将传统的PHP MySQL函数mysql_*与MySQLi接口混合在一起。在这种情况下,mysql_fetch_assoc()需要使用mysql_query()创建资源句柄。

要检索正确的结果,您需要使用MySQLi的方法:

$row = $result->fetch_assoc();

虽然您正在考虑它,但您可能需要考虑使代码不易受MySQL注入攻击。在将其插入查询字符串之前,Properly escape 任何用户提供的输入,或者更好的是,使用MySQLi parameter binding facilities