警告:mysql_fetch_array()期望参数1是资源,布尔值在..'但我的问题是正确的


'Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in...' but my query is correct

好的,所以我知道关于'为什么我得到这个警告与mysql_fetch_array…’已经被问了好几次了,我的问题是,所有被接受的答案都表明,服务器发出这个警告的原因是因为查询本身不正确……这不是我的情况。

代码如下:

$dbhost = "host";
$dbuser = "user";
$dbpass = "pass";
$dbname= "db";
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
mysql_select_db($dbname) or die ('<META HTTP-EQUIV="Refresh" CONTENT="0;URL=Failed.php?dberror=1">');    
$token = mysql_escape_string($_GET['token']); 
$query = "SELECT * FROM newuser WHERE token='$token'";
$result = mysql_query($query) or die(mysql_error());
while($row=mysql_fetch_array($result)) {
   do stuff...
}

'while'语句中的所有内容都被执行得很好-它对DB进行了一些更改,我可以验证正在发生。更重要的是,查询永远不会给出任何错误细节。我试过测试$result===false的情况,并要求错误信息,但它也不会返回任何东西。据我所知,查询字符串很好,没有失败。

我在这里做错了什么?除了SQL语句不好之外,PHP不喜欢我的While参数还有其他原因吗(我相信它并不坏)?

也,我知道我应该使用mysqli/PDO....我计划在不久的将来切换到那个,但我只是想让它工作,我不知道为什么它不会。在这一点上,这更是个人的事情……

谢谢你的帮助,如果你需要任何额外的信息请告诉我。(PHP Version 5.3)

下面是查询字符串($query)的回显:

  SELECT * FROM newuser WHERE token='6e194f2db1223015f404e92d35265a1b'

下面是查询结果($result)的var_dump:类型为(mysql result)

的资源(3)
$query = "SELECT * FROM newuser WHERE token='$token'";
$result = mysql_query($query) or die(mysql_error());
while($row=mysql_fetch_array($result)) {
   do stuff...
}

如果die语句未执行,则进入while循环时$result是OK的。那么问题可能是,您使用$result查询循环内以及,最终导致它被设置为false。

所以现在我可以说问题不是mysql_escape_string,也不是使用mysql,也不是user namepassword的访问权限,我想告诉你的是测试$result,如果它是一个资源,继续使用你的while块,就像这样

if(is_resource($result))
    {
        while($row = mysql_fetch_array($result))
            {//process your code here}
    }

并告诉我代码是否也被执行了:)

根据mysql_查询正确。你收到的错误是告诉你$result是布尔值(false)。

$token从何而来?您最好停止使用mysql_函数,而使用准备好的语句和绑定参数。

你的escape是错误的

     $token = mysql_real_escape_string($_GET['token']);

代替$token = mysql_escape_string($_GET['token']);

此扩展在PHP 5.5.0中已弃用,并将在将来被删除。http://php.net/manual/en/function.mysql-real-escape-string.php