簡體   English   中英

如何在查詢mysql中處理\\

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM