我有一个包含公平数据库查询的页面,每个查询都附加了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
数组每次都正确转储,因此在上一个$off_id
查询中始终使用$result
,如果没有,则应该触发die()
{1}}代替$result
查询。我真的不明白为什么会在随机页面加载时发生这种情况,而不是所有时间,因为这可能表明它不是语法问题,而是负载问题?
但是,即使这是一个加载问题,我也不明白为什么该特定查询会失败并触发die()
而其他查询正常。
任何帮助都可以理解为什么会出现这种情况,并建议我可以采取哪些措施来解决这个问题,我们将不胜感激!
答案 0 :(得分:1)
我猜你的查询在这里没有返回结果:
$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
的数组范围。