mysql_fetch_assoc没有获取数据

时间:2013-01-16 21:24:59

标签: php mysql

当我运行我的php文件时,它输出:

  

错误:无法获取结果,

我不明白为什么,我在其他文件中使用了这个确切的代码并且工作正常。

代码:

<?php
$mysql = mysql_connect('localhost','root','password') or die('ERROR: Could not connect, ' . mysql_error($mysql));
mysql_select_db('twp',$mysql) or die('ERROR: Could not connect, ' . mysql_error($mysql));
$q = mysql_query("SELECT * FROM DenCrypt_Users",$mysql) or die('ERROR: Could not lookup users, ' . mysql_error($mysql));
if(!$q)
{
    die('ERROR: Could not lookup users, ' . mysql_error($mysql));
}
while($row[] = mysql_fetch_assoc($q))
{
    $lp[] = $row['lastPing'];
    $usr[] = $row['usr'];
    for($i = 0; $i < count($usr);$i++)
    {
        if($lp[$i] + 180 >= time())
        {
            $q = mysql_query("UPDATE DenCrypt_Users SET online='Offline' WHERE usr='$usr[$i]'") or die('ERROR: Failed to update user, ' . mysql_error($mysql));
        }
    }
}
?>

我在phpmyadmin上运行了相同的查询,但它确实有效。为什么php不提取数据?

2 个答案:

答案 0 :(得分:9)

一个期望 mysql_fetch_assoc()最终在结果集的末尾返回false。不要死于这种可能性,只需退出循环:

while($row = mysql_fetch_assoc($q))
{
  // etc.

但是,正如其他人所提到的,真的应该停止使用现已弃用的ext/mysql。切换到改进的 MySQLi扩展名几乎就像在每个函数调用中插入字母i一样简单,尽管还应该投资parameterising prepared statements以便缓解SQL注入攻击。

答案 1 :(得分:2)

看起来你在while循环的每次迭代中都向数组$row添加了一个新项。

while($row[] = mysql_fetch_assoc($q) or die('ERROR: Could not fetch results, ' . mysql_error($mysql)))
{
    $lp[] = $row['lastPing'];
..
}

我认为你不应该能够访问数组lastPing上索引为$row的项目。你打算在这样的数组中收集获取的行吗?如果没有,请使用

while ( ($row = mysql_fetch_assoc($q)) !== false ) { .. }

请注意$row后丢失的方括号。 (如eggyal所述去除)