数据库
首页 > 数据库> > 使MySQL不要将字符串转换为数字

使MySQL不要将字符串转换为数字

作者:互联网

我的应用程序中有一个查询,通过ID或用户名从表中选择用户:

SELECT * FROM users WHERE id = '$x' OR username = '$x'

当给定用户名如foo,bar123或者id为1,123时,这是有效的.
但是当我提供像2foo这样的用户名时,它会选择用户2foo和id = 2的用户.所以它需要2foo的2foo并找到一个用户.另外我收到一条警告消息:1292:截断错误的DOUBLE值:2foo.

有没有办法告诉MySQL不要进行这种转换(对于这个查询而不是整个数据库)?或者我是否需要在查询后进行过滤以丢弃错误结果?

解决方法:

您的查询以某种方式形成,在MySQL中触发“这是一个特征而不是错误”的行为:您将相同的字符串(‘$x’)与数字字段(id)进行比较varchar字段(用户名).

虽然我确信,有一些方法可以在SQL中完成这项工作,我怀疑唯一正确的方法是修复创建查询的PHP.就像是

if (is_numeric($x)) $sql="SELECT * FROM users WHERE id = '$x' OR username = '$x'";
else $sql="SELECT * FROM users WHERE username = '$x'";

应该有所帮助

这是SQL版本,只是为了完整性:

SELECT * FROM users WHERE id = IF('$x' REGEXP '^[0-9]+$','$x',0) OR username = '$x'

注意:形成我假设的OQ,$x已经被转义.

标签:mysql,type-conversion,sqldatatypes
来源: https://codeday.me/bug/20190621/1251657.html