我试图阻止mysql将字符串转换为where子句中的int。
以下查询返回订单的正确行
SELECT delivery_name FROM orders WHERE orders_id = '985225'
以下查询也返回与将字符串转换为int相同的行,但我想阻止它返回行(即,不会将字符串转换为int并且有效地转换为int比如说,这不能准确地转换为int,所以不要这样做。
SELECT delivery_name FROM orders WHERE orders_id = '985225a'
我希望这是有道理的,任何帮助都会非常感激!
答案 0 :(得分:1)
你应该能够完全避免这种情况,但如果你想要一个解决方法,你可以将一个字符连接到字符串的前面,例如:
SELECT delivery_name
FROM orders
WHERE CONCAT('a',orders_id) = CONCAT('a','985225a')
答案 1 :(得分:0)
我建议你将该变量作为应用程序中的整数传递。
SELECT delivery_name FROM orders WHERE orders_id = '985225'
如果orders_id是一个整数,则意味着对于订单中的每一行,引擎生成implict将其转换为字符串以评估orders_id ='985225' 它不仅只是缓慢而且生成渲染,无法在orders_id中使用任何索引。
如果你能做的就是编辑SQL我建议你施放变量。
orders_id = CAST('985225'AS INT)
最后一个提示,在应用层,更容易验证输入并防止用户输入无效的整数。
答案 2 :(得分:0)
步骤1 - 从sql字符串中删除单引号。换句话说,改变这个:
WHERE orders_id = '985225'
到此:
WHERE orders_id = 985225
第2步 - 根据@Marc B的评论,确保你确实有一个整数。
步骤3 - 使用查询参数。据我所知,MySql接受它们。