mysql:用字符串比较整数并返回true

问题描述:

在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的字符串类型比较? 请给我建议的解决方案或没有更好的办法

所有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

你可以投你的数据,并比较它们的字符串:

"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