2010-03-03 88 views
2

在MySQL中是否有任何等效於===的運算符,它們檢查值以及數據類型?mysql:用字符串比較整數並返回true

我有一個數據庫,這是INT數據類型

從登錄頁面,輸入用戶logicheck過程中的用戶ID和現在

我下面寫的代碼

$loginCode = mysql_real_escape_string($_POST[userCode]); 
$sql=SELECT * FROM tbl_user WHERE u_id=".$loginCode ; 
$result=$db->query($sql); 

這將返回一個排u_id

現在當輸入2.0然後它也返回我不想要的行,我需要的是2.0寫入時,查詢確實不返回任何行。

gettype($loginCode)返回字符串....

這是不可思議的一個整數類型(U_ID)字段可以在MySQL的字符串類型比較? 請給我建議的解決方案或沒有更好的辦法

回答

2

所有SQL數據庫會浮隱式轉換爲int。

您可以確保您的登錄代碼只包含正常表達式的數字。例如:

WHERE u_id = <LoginCode> AND <LoginCode> RLIKE '^[0-9]+$' 
+0

那裏沒有LoginCode,它的'$ loginCode'如何在<> – diEcho 2010-03-03 14:25:57

+2

'$ sql =「SELECT * FROM tbl_user WHERE u_id =」。$ loginCode。「AND'」。$ loginCode裏添加php變量。 「'RLIKE'^ [0-9] + $'」;' – Andomar 2010-03-03 14:28:28

3

你可以投你的數據,並比較它們的字符串:

"SELECT * FROM tbl_user WHERE CAST(u_id as nvarchar(3))=".$loginCode 
+0

+1不錯,這會強制MySQL比較字符串。對於大型表格,這可能會損害性能,因爲u_id上的索引無法使用。但tbl_user不可能非常大:) – Andomar 2010-03-03 13:59:09

+0

它返回以下錯誤: '你的SQL語法有錯誤;檢查與您的MySQL服務器版本相對應的手冊,以在'n varchar(3)'附近使用正確的語法)= 2第1行限制0,30'' – diEcho 2010-03-03 14:15:10

+0

顯然,您不能轉換爲'varchar'。嘗試'修剪(轉換(u_id作爲nchar(12)))'而不是 – Andomar 2010-03-03 14:19:15