[英]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.