【问题标题】:MySql Stored Procedures Parameter EscapingMySql 存储过程参数转义
【发布时间】:2009-10-22 20:08:06
【问题描述】:

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

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 行附近使用 's do it')'"}

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

还是我在这里做错了什么?

【问题讨论】:

    标签: c# mysql stored-procedures parameters


    【解决方案1】:

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

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

    【讨论】:

    • 这最终在中继代码中得到修复。我希望它会出现在 6.2.1 版本中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-25
    • 2012-11-21
    • 1970-01-01
    • 2015-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多