使用 MySql 解决 C# 中的预准备语句问题
您在 C# 程序中实现预准备语句时遇到了障碍。转换为常规语句后,您的代码可以无缝运行,让您感到困惑。让我们调查一下这种差异背后的潜在罪魁祸首。
在您提供的代码片段中:
cmd = new MySqlCommand("SELECT * FROM admin WHERE admin_username='@val1' AND admin_password=PASSWORD('@val2')", MySqlConn.conn); //cmd.Prepare(); //cmd.Parameters.AddWithValue("@val1", tboxUserName.Text); //cmd.Parameters.AddWithValue("@val2", tboxPassword.Text); cmd = new MySqlCommand("SELECT * FROM admin WHERE admin_username='"+tboxUserName.Text+"' AND admin_password=PASSWORD('"+tboxPassword.Text+"')", MySqlConn.conn);
关键区别在于 SQL 查询中单引号 (' ') 的使用。准备好的语句利用参数占位符(@val1、@val2)来防止 SQL 注入攻击。使用常规语句时,您必须转义查询本身中的单引号。
要解决此问题,请考虑按如下方式修改代码:
cmd = new MySqlCommand("SELECT * FROM admin WHERE admin_username=@val1 AND admin_password=PASSWORD(@val2)", MySqlConn.conn); cmd.Parameters.AddWithValue("@val1", tboxUserName.Text); cmd.Parameters.AddWithValue("@val2", tboxPassword.Text); cmd.Prepare();
通过删除单引号 ' from查询并在添加参数后使用 cmd.Prepare() ,可以确保准备好的语句有效。这种方法可以保护您的代码免受恶意注入并增强其安全性。
以上是为什么我的 C# 预准备语句与 MySQL 失败,但常规语句有效?的详细内容。更多信息请关注PHP中文网其他相关文章!