mysql_fetch_assoc()死了并在随机页面加载时出错?

时间:2011-11-03 01:47:37

标签: php mysql

我有一个包含公平数据库查询的页面,每个查询都附加了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()而其他查询正常。

任何帮助都可以理解为什么会出现这种情况,并建议我可以采取哪些措施来解决这个问题,我们将不胜感激!

1 个答案:

答案 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的数组范围。