c# - .NET - 来自非用户输入的 MySQL 查询参数

标签 c# mysql prepared-statement

我知道在您的查询中使用参数可以防止 SQL 注入(inject)(当从用户输入中获取值时)。但是如果我想构建一个使用预定义值的查询,例如

MySqlCommand Command = Connection.CreateCommand();
Command.CommandText = "SELECT employee_address FROM employees WHERE employee_name = @employee_name";
Command.Parameters.AddWithValue("employee_name", "John");

我不能改用这个吗?

MySqlCommand Command = Connection.CreateCommand();
Command.CommandText = "SELECT employee_address FROM employees WHERE employee_name = 'John'";

这种场景有必要使用参数吗?

我也可以这样做吗?

string employee_name = "John"; //value depends on some sort of selection (not user input)

MySqlCommand Command = Connection.CreateCommand();
Command.CommandText = "SELECT employee_address FROM employees WHERE employee_name = '" + employee_name + "'";

最佳答案

我建议始终使用参数。使用字符串很简单,但猜猜你有一个 bool 值、小数或日期。不考虑格式会有所帮助。

如果使用参数,你的 sql 语句可以更短,如果你使用@0、@1、@2。您甚至可以编写一个带有参数数组的函数,该数组按照@0、@1、@2 的顺序进行替换。这样可以节省很多代码。 (例如 ExecuteSql(sql 作为字符串,paramarray myParameters 作为对象)

关于c# - .NET - 来自非用户输入的 MySQL 查询参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35431440/

相关文章:

c# - 如何确定文件是否与文件掩码匹配?

c# - 如何在 c# 中单击按钮时显示 iframe,并在显示另一个网格或 iframe 时使其不可见?

没有记录时MySql计算返回零

php - Mysql更新计数器

php - 使用 PDO 准备语句在 MySQL 中插入 BIT 值

c# - 将 bootstrap 3 升级到 4f,现在导航菜单不显示

c# - 这是否正确使用了Socket类的异步功能?

c# - 如何防止'字符被输入到文本框中?

php - 将 POST 数组插入到 mySql 表的多行中时出现问题

java - 仅针对选定情况对 JDBC 连接进行多线程访问