2009-10-22 102 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