我有一个页面,其中包含一些数据库查询,每个查询都附加了or die()
。我每1秒加载一次这个页面进行测试,在随机页面加载时(可能需要两个、五个或十个(,die()
被切换,并给出错误。
我分解了脚本,并设法隔离了特定的有问题的查询,即:
$fetch = mysql_fetch_assoc($result) or die("Error 3:" . mysql_error());
此特定行包含在:中
if($size > 0) {
$off_id = array();
while($row = mysql_fetch_assoc($result)) {
$off_id[] = $row['off_id'];
}
echo '<pre>';
var_dump($off_id);
echo '</pre>';
$rand = rand(0,$size);
$off_id = $off_id[$rand];
$query = "UPDATE rotation_data SET hit_counter = hit_counter + 1 WHERE off_id = '{$off_id}'";
$result = mysql_query($query) or die("Error 1:" . mysql_error());
$query = "SELECT * FROM offer_data WHERE off_id = '{$off_id}'";
$result = mysql_query($query) or die("Error 2:" . mysql_error());
$fetch = mysql_fetch_assoc($result) or die("Error 3:" . mysql_error());
$offer_url = $fetch['url']; $geo_target = $fetch['geo_target']; $blank = $fetch['blank'];
}
我注意到的事情:
- 未返回/打印
mysql_error()
。只有Error 3:
是 $off_id
数组每次都会正确转储,因此在上一个$result
查询中总是要使用一个$off_id
,如果没有,则应该为$result
查询触发die()
我真的不明白为什么这种情况会发生在随机页面加载上,而不是一直发生,因为这可能表明这不是语法问题,而是加载问题?
然而,即使是负载问题,我也不明白为什么那个特定的查询会失败并触发die()
,而其他查询都很好。
如果能帮助我理解为什么会发生这种情况,以及我能做些什么来解决这种问题的建议,我们将不胜感激!
我猜您在这里的查询没有返回结果:
$query = "SELECT * FROM offer_data WHERE off_id = '{$off_id}'";
以下语句不会返回FALSE
,只是返回$result
中的一个空结果集。
// No results here this time...
$result = mysql_query($query) or die("Error 2:" . mysql_error());
然后尝试从一个空的结果资源中获取一行。这导致FALSE
不是因为错误,而是因为没有行可获取,并且短路评估调用die()
。
我们看不到您在哪里设置$size
,但您可能偶尔会通过达到一个大于该数组的随机值来读取$off_id
的数组边界。