2011-09-05 79 views
0

我看过了几个SO职位,以及在其他网站上的文章,并且还没有找到一个有效的答案:(警告:mysql_fetch_assoc():提供的参数不是一个有效的MySQL结果资源

这里是我的代码:

include("db_conn.php"); 
$conn = mysql_connect($db_host, $db_user, $db_pass) or die(mysql_error()); mysql_select_db($db_name) or die(mysql_error()); 

$timestamp = time(); 
$add_time = time()+(60*60); 

$query = "SELECT * FROM links WHERE timestamp >= '$timestamp' AND overflow = 'NO'"; 
$result = mysql_query($query); 

if(mysql_num_rows($result) > 0) { 
while($row = mysql_fetch_assoc($result)){ 
     $link = $row['link']; 
     $hit_update = rand($row['min'],$row['max']); 

     $query = "UPDATE links SET timestamp = '$add_time', hit_counter = '0', max_hits = '$hit_update' WHERE link = '$link' AND timestamp <= '$timestamp' AND overflow = 'NO'"; 
     $result = mysql_query($query) or die(mysql_error()); 
} 
} 

mysql_close($conn); 

它会返回错误:

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource 

要诊断我已经试过:

  • 拆卸装箱if()声明。
  • 注释掉while()循环,并在$result = mysql_query($query);下面添加$size = mysql_num_rows($result); echo $size;,它返回3,即查询本身没有任何问题。

有谁知道这个问题可能是什么?

任何答案将非常感谢!

+0

问题在于更新 您重写$ result变量 – galchen

回答

3

您正在覆盖控制循环内循环的$result变量。这不好。数据库资源包含一个游标,您必须完全使用或以其他方式使用,只是用新结果覆盖它可能无法获得预期的结果(或确实会导致运行时错误)。

只需在循环内使用一个不同的变量进行查询。

+0

您是对的,我没有想到!当定时器下降时,我会接受你的答案。 – Avicinnian

相关问题