2014-02-07 48 views
-1

我運行一個MySQL查詢選擇一些數據,有時我叫MySQL查詢錯誤驗證

mysql_fetch_assoc() expects parameter 1 to be resource, boolean given 

一個錯誤,當我執行這個下面的代碼,

$result = $this->db->execute($sql); 
for ($i = 0; $data[$i + 1] = mysql_fetch_assoc($result); $i++); 
array_pop($data); 

如何優化這個編碼防止任何錯誤?

它有什麼問題嗎?我應該忽略這個錯誤嗎?

+0

不要練習使用mysql_了,它不知何故被棄用。 – witherwind

回答

0

這意味着該查詢是越野車,爲什麼,很可能是因爲您使用來源的組件構建它,你不真正檢查足夠的。 buggy語句拋出一個錯誤(因爲沒有結果可以被計算)。該錯誤返回爲false而不是mysql結果資源。由於您不檢查查詢是否成功,但盲目嘗試從結果中檢索詳細信息,因此會出現第二個錯誤。

所以有事情你必須投資於:

  1. 你應該總是檢查如果查詢成功可言: 附上您的查詢條件:if (FALSE!==($result=$this->db->execute($sql)))只有從檢索如果該條件解決爲true,則結果會重新輸入。

  2. 確保你確實(真的)檢查全部用於構造查詢的輸入數據。在這裏檢查也意味着編碼並正確地將其轉義,也可參見第4點。

  3. 在這樣的情況下,重要的是要分析什麼究竟是哪裏出了問題。 猜測什麼可能會出錯。因此,除了檢查查詢是否成功(1.)之外,如果不是這種情況,還應該查看mysql拋出的錯誤消息。爲此,請使用方法mysql_error()。正如其他功能一樣,它也有很好的文檔記錄。

  4. 你應該修改你的代碼,並從舊的,不推薦使用的mysql擴展遷移到mysqliPDO。這兩個都是php擴展,提供更多的安全性來構建buggy語句。閱讀有關「準備的語句」和「參數綁定」。