mysql - 转义字符串在 mysql concat 函数中未转义

标签 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 正在删除未转义的转义字符。如何解决这个问题问题?

最佳答案

这是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;

同时

Escape string gets un-escaped in mysql concat function

是正确且唯一正确的行为。

关于mysql - 转义字符串在 mysql concat 函数中未转义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18611997/

相关文章:

php - 如何在 ActionScript 3 中获取关于 MySQL 时间戳的时间?

mysql错误: Warning: #1265 Data truncated for column 'empatt_date' at row 1

powershell - 如何使用 Invoke-WebRequest 的 -OutFile 参数转义文件路径中的方括号

python sql转义正斜杠不起作用

xslt - 使用 XSLT 将 HTML 转换为转义 HTML

php - 如何制作畅销书排行榜?

php - Schema::dropIfExists() 在迁移时删除了数据库中的所有表:回滚

MySQL:维恩图的高效计算集合幂

java - 绝对最快的 Java HTML 转义函数

javascript - jinja url 命名路由转义大括号文字