好的,所以我知道关于'为什么我得到这个警告与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)
$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 name
和password
的访问权限,我想告诉你的是测试$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