c# - MySql 存储过程参数转义

标签 c# mysql stored-procedures parameters

我遇到了一些奇怪的事情,我觉得这是一个明显的错误,所以我猜测我做错了什么:我有下表:

CREATE TABLE BlurbTest
(   
     ID      SERIAL NOT NULL
    ,Blurb   TEXT NOT NULL
);

使用以下存储过程:

DELIMITER $$

CREATE PROCEDURE spInsertBlurbTest
(
     OUT ID INT
    ,IN  BlurbParm TEXT
)
BEGIN
    INSERT INTO BlurbTest(
        Blurb
    ) VALUES (
        BlurbParm
    );
    SET ID = LAST_INSERT_ID();
END$$

DELIMITER ;

以及以下 C# 代码:

using (var conn = new MySqlConnection(Settings.ConnectionString))
{
    conn.Open();
    using (var cmd = conn.CreateCommand())
    {
        cmd.CommandText = "spInsertBlurbTest";
        cmd.CommandType = CommandType.StoredProcedure;
        MySqlCommandBuilder.DeriveParameters(cmd);
        cmd.Parameters["@BlurbParm"].Value = "let's do it";
        cmd.ExecuteNonQuery(); // Throws Exception
    }
}

抛出异常并显示以下消息。 {“您的 SQL 语法有错误;请检查与您的 MySQL 服务器版本相对应的手册,了解在第 1 行使用 close 's do it')' 的正确语法”}

现在,如果我错了,请纠正我,但这不正是存储过程和参数旨在解决的问题类型,以帮助抵御注入(inject)攻击吗?

或者我在这里做错了什么?

最佳答案

你是对的,但驱动程序可能无法正确转义这些字符。这是你的吗?

http://bugs.mysql.com/bug.php?id=48247

关于c# - MySql 存储过程参数转义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1609658/

相关文章:

c# - 如何使用 C# 在 .NET 中获取格式化的 JSON?

c# - 在 EntityframeworkCore 中使用 async/await 的最佳方法

mysql - 如何将我的网站用户的电子邮件地址存储在 Aweber 我的 MySQL 数据库中?

mysql - 如何在搜索数据库sqlite时获取列名?

php - PDO 问题 - 在非对象上调用成员函数 query()

SQL:避免硬编码或魔数(Magic Number)

MySQL位置选择查询在存储过程中返回0

c# - 对信用卡号使用字符串格式

c# - 如何使网站状态对所有平台可用

SQL动态创建存储过程?