2013-02-17 113 views
0

下面是我使用withing代碼中的for循環,其運行10次:更新查詢運行,但沒有更新表PHP

$query = "UPDATE fblikes SET likes = '$var[$i]' WHERE link = '$web[$i]'"; 

if(mysql_query($query)) 
{ 
    echo $query; 
}       
else 
{ 
    echo mysql_error(); 
} 

的代碼運行時,我得到ok!印刷10次,但什麼也沒有發生在表。我還檢查了2個陣列,即$var$web,它們包含正確的值。

查詢對我來說看起來沒問題。這裏是我得到的(10個輸出之一):UPDATE fblikes SET likes = '5' WHERE link = 'xxxxxxx.com/xxxx/iet.php';

+3

問題是'WHERE link ='$ web [$ i]'「',你應該正確地轉義該變量。 – 2013-02-17 10:00:00

+2

爲什麼不打印查詢本身,而不是毫無意義的」ok「? – 2013-02-17 10:00:20

+0

@MahmoudGamal這意味着通過逃避變量嗎?我不明白 – Arihant 2013-02-17 10:02:43

回答

2

我不知道問題到底是什麼,並找出你應該打印$query的值,並告訴我們你得到什麼。更多請致電mysql_query()後告訴我們mysql_affected_rows()的價值。

但是,您的代碼實現了一些錯誤的模式。

首先,你是不是逃避$var[$i]$web[$i]有兩個潛在影響:

  • 可以產生錯誤的查詢
  • 你不輸入消毒到數據庫中,從而暴露你的應用程序安全問題

此外,您可以執行幾個類似的查詢,這些查詢僅在所提供的輸入上有所不同。

對於這兩個問題,解決方案都是使用準備好的語句,這將爲您提供更多的控制權,安全性和性能。考慮放棄mysql_*功能並切換到mysqli_*PDO,並閱讀約prepared statements