如何在查询mysql中处理\

时间:2016-01-06 13:10:09

标签: 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

有没有最好的解决方案来解决这个问题?

1 个答案:

答案 0 :(得分: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