SQL参数化查询讲座 (二)

以上的问题都可以通过参数化查询解决。上面的SQL语句如果采用参数化查询的方式,则表示为“SELECT column1, column2, … FROM table1 WHERE param_column1 = ? AND param_column2 = ? ”。其中两个问号(?)是待定的数据列的值。在有些开发平台,问号的地方可能用有指定标记的命名参数代替,如“SELECT column1, column2, … FROM table1 WHERE param_column1 = @param1 AND param_column2 = @ param2”。不管是问号还是命名参数,咋一看都似乎与字符串格式化差不多。不过,在参数化查询中,程序直接把这个包含待定值的SQL语句提交给数据库,由数据库引擎为之生成查询计划。之后,程序以参数的方式提供这些值。数据库引擎把参数中的值应用到查询计划中,然后执行查询结果。如果改变参数的值后再执行,则得到不同的查询结果,但SQL语句不需要重新提交,查询计划也不需要重新生成,参数的修改对查询计划没有影响。哪怕参数中包含精心设计的特殊字符,也不会形成SQL注入式攻击。参数改变的次数越多,则查询计划的重用性越高。

与程序设计语言中的函数或过程类似,SQL语句的参数也可以分为输入参数、输出参数及输入输出参数。其中输入参数最为常见。上面的查询例子中的两个参数都是输入参数。参数的类型可以是整数、浮点数、字符串乃至二进制数据。采用参数化查询,可以很方便地导入二进制数据。本文后面会举例说明。

 

评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值