2011-09-05 76 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

相關問題