首页 > 数据库 > mysql教程 > 为什么我的 C# 预准备语句与 MySQL 失败,但常规语句有效?

为什么我的 C# 预准备语句与 MySQL 失败,但常规语句有效?

Patricia Arquette
发布: 2024-11-16 15:32:03
原创
366 人浏览过

Why Does My C# Prepared Statement with MySQL Fail, But a Regular Statement Works?

使用 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板