arn*_*nep 4 mysql type-conversion sqldatatypes
我的应用程序中有一个查询,通过ID或用户名从表中选择用户:
SELECT * FROM users WHERE id = '$x' OR username = '$x'
Run Code Online (Sandbox Code Playgroud)
这是工作给予用户名的时候一样foo,bar123或像IDS 1,123.但是,当我提供类似的用户名时2foo,选择用户2foo和用户id=2.因此,需要对2的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'";
Run Code Online (Sandbox Code Playgroud)
应该有所帮助
这是SQL版本,只是为了完整性:
SELECT * FROM users WHERE id = IF('$x' REGEXP '^[0-9]+$','$x',0) OR username = '$x'
Run Code Online (Sandbox Code Playgroud)
注意:形成我假设的OQ,$ x已经被转义.
| 归档时间: |
|
| 查看次数: |
523 次 |
| 最近记录: |