-1

当我运行我的 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 不获取数据?

4

2 回答 2

9

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

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

但是,正如其他人所提到的,您真的应该停止使用现已弃用的ext/mysql. 切换到改进的 MySQLi扩展几乎就像在i每个函数调用中插入字母一样简单,尽管还应该投资于参数化准备好的语句以减轻 SQL 注入攻击。

于 2013-01-16T21:30:07.757 回答
2

看起来您在$rowwhile 循环的每次迭代中都向 Array 添加了一个新项目。

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

我认为您不应该能够使用lastPingArray 上的索引访问项目$row。您是否打算将获取的行收集到这样的数组中?如果没有,只需使用

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

注意后面缺少的方括号$row。(如 Eggyal 所述将模具移除)

于 2013-01-16T21:37:49.807 回答