mysql:将整数与字符串进行比较并返回true

mysql:将整数与字符串进行比较并返回true,mysql,Mysql,MySQL中是否有与==等效的运算符,用于检查值和数据类型 我在数据库中有一个u\u id字段,它是int数据类型 现在,从用户输入用户id的登录页面开始,在logicheck期间,我写下下面的代码 $loginCode = mysql_real_escape_string($_POST[userCode]); $sql=SELECT * FROM tbl_user WHERE u_id=".$loginCode ; $result=$db->query($sql); 这将返回一行 现在

MySQL中是否有与
==
等效的运算符,用于检查值和数据类型

我在数据库中有一个
u\u id
字段,它是int数据类型

现在,从用户输入用户id的登录页面开始,在logicheck期间,我写下下面的代码

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

现在,当输入2.0时,它也会返回我不想要的行,我需要的是当写入2.0时,query不会返回任何行

gettype($loginCode)
返回字符串

奇怪的是,在mysql中,整数类型(u_id)字段如何与字符串类型相比较?
请向我推荐解决方案或任何更好的方法

您可以将数据转换为字符串并进行比较:

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

所有SQL数据库都会隐式地将浮点转换为int

您可以确保登录代码只包含带有常规表达式的数字。例如:

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

+1很好,这将迫使MySQL比较字符串。对于大型表,这可能会影响性能,因为无法使用u_id上的索引。但tbl_用户不太可能很大:)它返回以下错误:
您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以了解在第1行使用接近'n varchar(3))=2 LIMIT 0,30'的正确语法。显然,您不能强制转换为
varchar
。尝试
trim(cast(u_id为nchar(12))
而不是
SELECT*FROM tbl_用户,trim(cast(u_id为nchar(3))=2.0
返回仍然返回相同的结果在非LoginCode中,它的
$LoginCode
如何在
$sql=“SELECT*FROM tbl_用户,其中u id=“.LoginCode.”和“.$LoginCode.”中添加php变量“^[0-9]”