代码之家  ›  专栏  ›  技术社区  ›  feihtthief

mysql存储过程参数转义

  •  0
  • feihtthief  · 技术社区  · 16 年前

    我遇到了一些奇怪的事情,我觉得是公然成为一个错误,所以我猜我做错了什么:我有下表:

    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 Server版本相对应的手册,以获得在第1行“s do it”)附近使用的正确语法。”

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

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

    1 回复  |  直到 16 年前
        1
  •  1
  •   Mike Burton    16 年前

    你说得对,但司机可能没有正确地转义这些字符。这是你的吗?

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