2009-10-22 154 views
0

我遇到一些奇怪的来到,我觉得是明目张胆的是一个错误,所以我猜,我做错了什么:我有如下表:MySQL存储过程的参数逃离

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行使用正确的语法”)“}

现在,我错了,但这不完全是存储过程和参数旨在解决的问题类型,以帮助防止注入攻击?

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

回答

1

你是对的,但驱动程序可能不会正确地逃脱这些角色。这是你的吗?

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

+0

这将是我:) – feihtthief 2009-10-23 05:04:53

+0

这最终被固定在树干上的代码。我期待它在6.2.1版本中。 – feihtthief 2009-11-12 20:08:27