转义字符串在mysql concat函数中被取消转义

时间:2013-09-04 11:00:36

标签: mysql escaping

我有以下SP:

CREATE PROCEDURE sp_test
(
    text_data varchar(50)
)
BEGIN
    SET @var_query = CONCAT('SELECT * FROM sample_table WHERE col="',text_data,'"');
    PREPARE stmt FROM @var_query;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
END;

我称之为SP CALL sp_test('Screen size 4.3\"')。我收到一个错误。然后,如果我检查@var_query变量的值,它就是它的外观。

+-------------------------------------------------------+
| @var_query                                            |
+-------------------------------------------------------+
| SELECT FROM sample_table WHERE col="screen size 4.3"" |
+-------------------------------------------------------+

正如你所看到的那样,转义的“正在取消转义。如果我直接用转义的双引号命中这个select语句,它运行正常。所以这意味着concat正在删除未转义的转义字符。如何解决这个问题问题

1 个答案:

答案 0 :(得分:1)

这是how it have to be

SET @var_query = SELECT * FROM sample_table WHERE col=?';
SET @data = text_data;
PREPARE stmt FROM @var_query;
EXECUTE stmt USING @data;
DEALLOCATE PREPARE stmt;

  

转义字符串在mysql concat函数中取消转义

是正确的,也是唯一正确的行为。