繁体   English   中英

MySQL截断命令,参数不起作用

[英]MySQL truncate command with parameter not working

为什么在尝试截断MySQL表(使用MySQL Connector / Net)时会出现异常? 我试图给表名带一个参数。

这是我正在执行的代码:

var connectionString = "Server="+_server+";Uid="+_user+";Pwd="+_password+";Database="+_database+";";

try
{
    using (var conn = new MySqlConnection(connectionString))
    {
        conn.Open();
        const string sql = "TRUNCATE TABLE @tablename"; // also tried with TRUNCATE @tablename
        var cmd = new MySqlCommand(sql, conn);
        cmd.Parameters.AddWithValue("@tablename", "test");
        cmd.ExecuteNonQuery();
        conn.Close();
    }

}
catch (MySqlException ex)
{
    Console.WriteLine(ex.ToString());
}

这是一个例子:

MySql.Data.MySqlClient.MySqlException(0x80004005):您的SQ L语法中有错误; 检查与MySQL服务器版本对应的手册,以便在第1行的“test”附近使用正确的语法

例如,当我尝试选择查询时,我没有任何问题。 运行正常并返回正确的数据:

conn.Open();
const string sql = "SELECT body FROM test WHERE id=@pid";
var cmd = new MySqlCommand(sql, conn);
cmd.Parameters.AddWithValue("@pid", 1);
cmd.ExecuteScalar();
conn.Close();

参数用于查询值,而不是表格之类的对象名称。

所以这肯定不会起作用。

您需要使用字符串连接在命令字符串中设置表名。 您可以通过手动检查表名中的奇怪字符(空格,短划线,分号等)来避免SQL注入攻击。

我已经玩了一段时间了,我似乎无法让它工作。 我在网上找不到任何文档,所以我开始认为你可能无法用你尝试过的参数截断。

但是,是否真的需要在此命令上阻止SQL注入? 用户是否输入了他们想要截断的表的名称,如果是这样,他们只是要截断一个表......这本质上就是命令的作用?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM