[英]how to handle \ in query mysql
我有一个过程,在该过程中,我以字符串形式进行查询,然后准备查询并执行。
这是程序
CREATE DEFINER=`root`@`%` PROCEDURE `dim_add_customer`(
IN _customer_id BIGINT(20) ,
IN _first_name VARCHAR(50) ,
)
BEGIN
SET @_query := CONCAT('first_name = "',_first_name,'"');
SET @_query := CONCAT('UPDATE customer_detail SET ',@_query,' WHERE customer_id = ',_customer_id);
PREPARE stmt FROM @_query;
END$$
DELIMITER ;
现在当我打电话
call dim_add_customer(1,'abc\\')
然后在创建字符串查询时出现问题。
UPDATE customer_detail SET first_name = "abc\" WHERE customer_id = 1
有什么最好的解决方案来解决这个问题?
您不应该通过concat构建查询。
您应该在查询中使用类似的参数
SET @_query="UPDATE customer_detail
SET first_name=@_first_name
WHERE customer_id = @_customer_id"
我不确定是否可以直接从输入参数(例如
CREATE DEFINER=`root`@`%` PROCEDURE `dim_add_customer`(
IN @_customer_id BIGINT(20) ,
IN @_first_name VARCHAR(50) ,
)
否则你必须
SET @_customer_id = _customer_id
SET @_first_name = _first_name
CAVEAT:我习惯了用变量创建过程的MsSql方式。 我可能误解了一些东西,但是至少通过concat创建sql应该是您的最后选择。
通过concat创建查询等同于
x=1
q=concat("y=",x,"+2")
eval (q)
代替
x=1
y=x+2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.