我对使用数据库非常陌生。现在我可以写SELECT
,UPDATE
,DELETE
,和INSERT
命令。但是我看过很多我们喜欢写的论坛:
SELECT empSalary from employee where salary = @salary
…代替:
SELECT empSalary from employee where salary = txtSalary.Text
为什么我们总是喜欢使用参数,我将如何使用它们?
我想知道第一种方法的用途和好处。我什至听说过SQL注入,但是我不太了解。我什至不知道SQL注入是否与我的问题有关。
当数据库与程序界面(例如桌面程序或网站)结合使用时,使用参数有助于防止 SQL注入攻击 。
在您的示例中,用户可以通过编写中的语句直接在数据库上运行SQL代码txtSalary
。
例如,如果他们要编写0 OR 1=1
,则执行的SQL将是
SELECT empSalary from employee where salary = 0 or 1=1
从而所有empSalaries都将被退回。
此外,用户可能会对您的数据库执行更差的命令,包括删除以下命令0; Drop Table employee
:
SELECT empSalary from employee where salary = 0; Drop Table employee
employee
然后将删除该表。
就您而言,您似乎正在使用.NET。使用参数非常简单:
string sql = "SELECT empSalary from employee where salary = @salary";
using (SqlConnection connection = new SqlConnection(/* connection info */))
using (SqlCommand command = new SqlCommand(sql, connection))
{
var salaryParam = new SqlParameter("salary", SqlDbType.Money);
salaryParam.Value = txtMoney.Text;
command.Parameters.Add(salaryParam);
var results = command.ExecuteReader();
}
Dim sql As String = "SELECT empSalary from employee where salary = @salary"
Using connection As New SqlConnection("connectionString")
Using command As New SqlCommand(sql, connection)
Dim salaryParam = New SqlParameter("salary", SqlDbType.Money)
salaryParam.Value = txtMoney.Text
command.Parameters.Add(salaryParam)
Dim results = command.ExecuteReader()
End Using
End Using
编辑2016-4-25:
根据George Stocker的评论,我将示例代码更改为not use
AddWithValue
。另外,通常建议您将IDisposable
s包装在using
语句中。
我正在学习亚当·简斯的合唱团教程。 数据是用这个代码块加载的 而准备就绪被定义为 我把这个序列理解为 首先-创建一个名为promises的数组,其中第一项是来自此链接的已解析json,第二项是来自该文件的id/值对的映射 第二,获取promise变量中的所有promise,如果成功,则触发函数ready,如果失败,则不执行任何操作 如果这是对的,那么相对于这样的东西有什么优势呢?我用伪代码写这个因
问题内容: 是否可以在一个查询中将多个SQL LIKE通配符串在一起-像这样? 目的是查找同时包含通配符但没有特定顺序的记录。 问题答案: 正确的SQL语法是:
本文向大家介绍python中 这两个参数是什么意思:*args,**kwargs?我们为什么使用它们?相关面试题,主要包含被问及python中 这两个参数是什么意思:*args,**kwargs?我们为什么使用它们?时的应答技巧和注意事项,需要的朋友参考一下 如果我们不确定要往一个函数中传入多少参数,或者我们希望以元祖或者列表的形式传参数时,我们可以使用*args。如果我们不知道要往函数中传递多少
问题内容: 我如何使用mysqli用LIKE进行查询并获得所有结果? 这是我的代码,但是不起作用: 此代码似乎不起作用。我已经搜索了很多。也可能返回多于1行。那么,即使返回的结果超过1行,我如何获得所有结果呢? 问题答案: 这是您正确获取结果的方式 或者,您也可以执行以下操作: 希望您意识到我从这里和这里的手册中直接得到了答案,这是您应该首先去的地方。
Javadoc说 返回一个收集器,该收集器将输入元素累加到一个新集合中。无法保证返回的集合的类型、可变性、可序列化性或线程安全性;如果需要对返回集进行更多控制,请使用toCollection(java.util.function.Supplier)。 所以似乎是一个避免出现问题的好主意。 我的问题是,尽管我尽了最大努力,我还是无法从中得到比 下面是我使用的代码: 那么,为什么Javadoc声明没有
本文向大家介绍你最喜欢用哪些编辑器?喜欢它的理由是什么?相关面试题,主要包含被问及你最喜欢用哪些编辑器?喜欢它的理由是什么?时的应答技巧和注意事项,需要的朋友参考一下 vscode。可以灵活安装不同插件,真正做到了一个编辑器,适配所有的编程语言。 它和virtual stuido理念不同,vs是想把所有的都集成到一起,导致它的安装包越来越庞大,臃肿,而vscode凭借插件运行机制,即插即用,非常灵