在使用参数化查询的情况下,
数据库服务器不会将参数的内容视为SQL指令的一部份来处理,而是在数据库完成
SQL 指令的编译后,才套用参数运行,因此就算参数中含有具有损的指令,也不会被数据库所运行。 有部份的开发人员可能会认为使用参数化查询,会让程序更不好维护,或者在实现部份功能上会非常不便,然而,使用参数化查询造成的额外开发成本,通常都远低于因为SQL注入攻击漏洞被发现而遭受攻击,所造成的重大损失。
编辑本段SQL 指令撰写方法
在撰写 SQL 指令时,利用参数来代表需要填入的数值,例如:
Microsoft SQL Server
Microsoft SQL Server 的参数格式是以 "@" 字符加上参数名称而成,SQL Server 亦支持匿名参数 "?"。 SELECT * FROM myTable WHERE myID = @myID INSERT INTO myTable (c1, c2, c3, c4) VALUES (@c1, @c2, @c3, @c4)
Microsoft Acce
Microsoft Access 不支持具名参数,只支持匿名参数 "?"。 UPDATE myTable SET c1 = ?, c2 = ?, c3 = ? WHERE c4 = ?
MySQL
MySQL 的参数格式是以 "?" 字符加上参数名称而成。 UPDATE myTable SET c1 = ?c1, c2 = ?c2, c3 = ?c3 WHERE c4 = ?c4
客户端程序撰写方法
在客户端代码中撰写使用参数的代码,例如:
ADO.NET
SqlCommand
sqlcmd = new SqlCommand("INSERT INTO myTable (c1, c2, c3, c4) VALUES (@c1, @c2, @c3, @c4)", sqlconn); sqlcmd.Parameters.AddWithValue("@c1", 1); // 设定参数 @c1 的值。 sqlcmd.Parameters.AddWithValue("@c2", 2); // 设定参数 @c2 的值。 sqlcmd.Parameters.AddWithValue("@c3", 3); // 设定参数 @c3 的值。 sqlcmd.Parameters.AddWithValue("@c4", 4); // 设定参数 @c4 的值。 sqlconn.Open(); sqlcmd.ExecuteNonQuery(); sqlconn.Close();
PHP
$query = sprintf("SELECT * FROM Users where UserName='%s' and Password='%s'",
mysql_real_escape_string($Username), mysql_real_escape_string($Password)); my
sql_query($query); 或是 $db = new mysqli("localhost", "user", "pass", "database"); $stmt = $mysqli -> prepare("SELECT priv FROM testUsers WHERE username=? AND password=?"); $stmt -> bind_param("ss", $user, $pass); $stmt -> execute();
JDBC
PreparedStatement prep = conn.prepareStatement("SELECT * FROM USERS WHERE USERNAME=? AND PASSWORD=?"); prep.setString(1, username); prep.setString(2, password);
Cold Fusion
<cfquery name="Recordset1" datasource="cafetownsend"> SELECT * FROM COMMENTS WHERE COMMENT_ID =<cfqueryparam value="#URL.COMMENT_ID#" cfsqltype="cf_sql_numeric"> </cfquery>
相关推荐
此文档中详细的记载了,Sql Server参数化查询之where in和like实现详解,希望可以帮到下载的朋友们!
C#做的"参数化查询"很简单的小程序,让你一看就会....
参数化查询为什么能够防止SQL注入[整理].pdf
一个可以避免SQL注入的方法,大家可以通过这个方法解决一些在与数据库打交道时的安全问题
说来惭愧,工作差不多4年了,直到前些日子被DBA找上门让我优化一个CPU占用很高的复杂SQL语句时,我才突然意识到了参数化查询的重要性。 相信有很多开发者和我一样对于参数化查询认识比较模糊,没有引起足够的重视...
SQL Server 2008 参数化查询
参数化查询.exe
参数化查询优化旨在大幅减少优化时间并尽可能减少查询计划执行的次优性,那究竟如何实现参数化查询的有效优化
SQL参数化查询详解.pdf
什么是参数化查询? 一个简单理解参数化查询的方式是把它看做只是一个T-SQL查询,它接受控制这个查询返回什么的参数。通过使用不同的参数,一个参数化查询返回不同的结果。要获得一个参数化查询,你需要以一种特定的...
若有一天你不可避免的需要提高SQL的查询性能,需要一次性where in 几百、上千、甚至上万条数据时,参数化查询将是必然进行的选择。然而如何实现where in和like的参数化查询,是个让不少人头疼的问题。 where in 的...
SQLServer2008参数化查询[参照].pdf
浅析SqlServer参数化查询[参考].pdf
delphi· 如何以参数化方式查询记录的详细例子,对初学者很有帮助。,
若有你不可避免的需要提高SQL的查询性能,需要一次性where in 几百、上千、甚至上万条数据时,参数化查询将是必然进行的选择。然而如何实现where in和like的参数化查询,是个让不少人头疼的问题。 where in 的...
今天我就把我用ACCESS参数化查询的一些方法和经验和大家分享 希望对大家有所启发,有写的不对的地方希望高手们多多指教 ASP.NET 用OleDbCommand的new OleDbParameter创建参数货查询 ASP用Command的CreateParameter...
使用参数化查询在SQL中为IN()运算符发送参数的实用工具类
C#查询参数化例子,里面详细讲解存储过程的使用。