2016-01-06 108 views
0

我有一个程序,我在查询字符串,然后准备查询和执行。如何处理查询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\\') 

然后有问题创造串query.The查询它使

UPDATE customer_detail SET first_name = "abc\" WHERE customer_id = 1 

有什么最好解决这个问题的方法?

+0

'/'相当于............ ?? –

+0

你想要包含或删除斜线? – Haymaker

+0

@Haymaker是的,我想保存斜线 –

回答

1

您不应该通过concat构建查询。

您应该使用参数查询类似

SET @_query="UPDATE customer_detail 
    SET [email protected]_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