当我运行我的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不提取数据?
答案 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所述去除)