防止mysql在where子句中将字符串转换为int

时间:2013-12-20 16:47:13

标签: mysql sql casting

我试图阻止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'

我希望这是有道理的,任何帮助都会非常感激!

3 个答案:

答案 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接受它们。