我遇到了一些奇怪的事情,我觉得这是一个明显的错误,所以我猜测我做错了什么:我有下表:
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 行使用 close 's do it')' 的正确语法”}
现在,如果我错了,请纠正我,但这不正是存储过程和参数旨在解决的问题类型,以帮助抵御注入(inject)攻击吗?
或者我在这里做错了什么?
最佳答案
你是对的,但驱动程序可能无法正确转义这些字符。这是你的吗?
关于c# - MySql 存储过程参数转义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1609658/