Выход из хранимых процедур MySql - PullRequest
0 голосов
/ 23 октября 2009

Я столкнулся с чем-то странным, что, по моему мнению, является явной ошибкой, поэтому я предполагаю, что я делаю что-то не так: у меня есть следующая таблица:

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, чтобы найти правильный синтаксис для использования рядом с" s do it ")" в строке 1 "}

Теперь, исправьте меня, если я ошибаюсь, но разве это не совсем та проблема, которую хранимые процедуры и параметры предназначены для решения для защиты от атак инъекций?

Или я здесь что-то не так делаю?

1 Ответ

1 голос
/ 23 октября 2009

Вы правы, но драйвер, возможно, неправильно экранирует эти символы. Это твое?

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

...