2011-04-23 69 views
0

我有一個表的主鍵:MySQL查詢返回的行0時,它不符合查詢條件的

類型:INT長度:11默認值:NULL額外:AUTO_INCREMENT

表包含3記錄 - 0,1和4

當我嘗試...

SELECT the_key FROM the_table WHERE the_key='someRandomString' 

...返回1次的記錄(主鍵0)

我可以用PHP is_numeric()解決它,但爲什麼它不返回0記錄?

+0

你用什麼字符串來等於一個數字? – mcgrailm 2011-04-23 13:55:45

+0

這是一個基於項目的應用程序。我從查詢字符串中獲取項目標識並檢查項目是否存在。別擔心,我更安全地做。該示例已被簡化。 :) – mradbourne 2011-04-23 14:04:17

回答

2

它看起來像你比較int列與字符串值?它看起來像MySQL正在將字符串轉換爲一個int,來與0,並匹配該行。

兩個選項:

  1. 不要那樣做。不要編寫不兼容類型的比較。
  2. 看看MySQL是否有一個選項可以進入更嚴格的模式,在這種模式下它不會自動轉換不兼容的類型。
+0

感謝您的迴應。恐怕我確實需要根據主鍵檢查查詢字符串。如果有一些PHP或MySQL解決方案可以放入頁面而不是更改數據庫設置,那將是非常棒的。 – mradbourne 2011-04-23 14:11:20

+1

如果您的主鍵是auto_incrementing,請從1開始,而不是零。對於一個ID來說,零是一個值得懷疑的值,因爲它在各種上下文中都有特殊含義(例如false,null)。 – Thilo 2011-04-23 14:59:00

+0

將字符串與數字進行比較是一個糟糕的主意。在你的查詢中使用它們之前,你應該對你的值調用intval(),並且你不應該用引號括起來(字符串用引號引起來,數字不用)。 – TehShrike 2011-04-23 15:36:39