2009-10-22 5 views
0

je suis tombé sur quelque chose d'étrange que je me sens est flagrante d'être un bug si je devine que je fais quelque chose de mal: je le tableau suivant:MySql Procédures stockées Paramètre Échapper

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

avec ce qui suit proc stocké:

DELIMITER $$ 

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

DELIMITER ; 

et le code 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 
    } 
} 

Ce qui jette un exception avec le message suivant. {"Vous avez une erreur dans votre syntaxe SQL, consultez le manuel correspondant à votre version du serveur MySQL pour la bonne syntaxe à utiliser près de 'do it') 'à la ligne 1"}

Maintenant, corrigez-moi si Je me trompe, mais n'est-ce pas exactement le type de problème que les procédures stockées et les paramètres sont destinés à résoudre afin de lutter contre les attaques par injection?

Ou est-ce que je fais quelque chose de mal ici?

Répondre

1

Vous avez raison, mais il se peut que le pilote n'échappe pas correctement à ces caractères. Est-ce-que cela est a toi?

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

+0

Ce serait le mien :) – feihtthief

+0

Cela a finalement été fixé dans le code du coffre. Je m'attends à ce qu'il soit dans la version 6.2.1. – feihtthief

Questions connexes