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?
Ce serait le mien :) – feihtthief
Cela a finalement été fixé dans le code du coffre. Je m'attends à ce qu'il soit dans la version 6.2.1. – feihtthief