我正在使用php mysql_query()從我的SQL數據庫中選擇行,但出於某種原因,它選擇的行與查詢不匹配。例如:SQL SELECT正在選擇與查詢不匹配的行
mysql_query("SELECT * FROM Table WHERE ID='153'")
這將返回誰擁有的153
的ID,但這樣會行:
mysql_query("SELECT * FROM Table WHERE ID='153c'")
難道我做錯了什麼?
我正在使用php mysql_query()從我的SQL數據庫中選擇行,但出於某種原因,它選擇的行與查詢不匹配。例如:SQL SELECT正在選擇與查詢不匹配的行
mysql_query("SELECT * FROM Table WHERE ID='153'")
這將返回誰擁有的153
的ID,但這樣會行:
mysql_query("SELECT * FROM Table WHERE ID='153c'")
難道我做錯了什麼?
如上所述,問題是將字符串值與整數值進行比較。你的表達是:
你可以想像MySQL的引擎描述它的作用爲:「id
是一個整數列,因此,我需要把它比作一個整數值哦,右側是一個字符串。 ,所以我會將右側轉換爲整數。「
MySQL將值從字符串轉換爲數字的方式可稱爲「靜音轉換」。它轉換找到的最長的前導號碼,然後停止。如果沒有前導號碼(如'a123'
),則值爲0
。沒有錯誤產生。
如果你真的想迷惑自己,考慮以下因素:
select (case when 123 = '123e' then 1 else 0 end),
(case when 123 = '123e3' then 1 else 0 end),
(case when 123 = '123a' then 1 else 0 end),
(case when 123 = '123a3' then 1 else 0 end)
這將返回:真的,假的,真正的,真實的。爲什麼第二個是假的,但其他的是真的?那麼,'123e3'被解釋爲科學記數法,所以價值變成了123,000。對於所有其他人,轉換停止在第一個字母字符處。
正如在其他答案中提到的,顯而易見的解決方法是將單引號放在常量上。
爲什麼您將ID值作爲字符串傳遞?這很可能是你的問題。嘗試通過以下查詢代替:
mysql_query("SELECT * FROM Table WHERE ID= 153")
通過這種方式,被搜索的ID值是一個int(或任何其它原語的ID列被設置爲)。這應該適當地限制ID。另外,如果您使用數字創建ID,最好只使用不同的整數而不使用字符串。
將數字字符串數據隱式轉換爲數字...... –
mysql_query(SELECT * FROM Table WHERE ID ='153c'「)您在這行代碼中缺少一個雙重qoutes – zee
缺少的報價只是一個錯誤地輸入問題,但@MitchWheat是正確的。 – Zach