`
zhuzhiguosnail
  • 浏览: 110560 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

参数化查询

 
阅读更多

参数化查询(Parameterized Query 或 Parameterized Statement)是指在设计与数据库链接并访问数据时,在需要填入数值或数据的地方,使用参数 (Parameter) 来给值,这个方法目前已被视为最有效可预防SQL注入攻击 (SQL Injection) 的攻击手法的防御方式。

编辑本段原理

在使用参数化查询的情况下,数据库服务器不会将参数的内容视为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));  mysql_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>
分享到:
评论

相关推荐

    C#参数化查询,避免SQL注入

    为了解决这个问题,C#提供了一种有效的方法——参数化查询,这是一种安全且高效的方式来执行数据库操作,能有效地防止SQL注入攻击。 参数化查询的核心思想是将SQL语句和实际的值分离,通过占位符(如`?`或`@param`...

    Sql Server参数化查询之where in和like实现详解

    Sql Server参数化查询之where in和like实现详解 在Sql Server中,参数化查询是提高查询性能和防止SQL注入攻击的有效方法之一。其中,where in和like是两个常用的查询条件,然而它们的参数化实现却不是那么简单。...

    C#做的"参数化查询"

    在数据库交互中,参数化查询是防止SQL注入、提高代码可读性和可维护性的一种重要技术。本文将深入探讨C#中如何实现参数化查询,并通过实例来帮助理解这一概念。 参数化查询是通过使用占位符(如问号或参数名称)而...

    参数化查询为什么能够防止SQL注入[整理].pdf

    参数化查询为什么能够防止SQL注入 参数化查询是一种防止SQL注入的有效方法,但很多人不知道为什么参数化查询能够防止SQL注入。下面,我们将一步一步的解释为什么SQL注入发生和参数化查询如何防止SQL注入。 首先,...

    SQL参数化查询详解.pdf

    SQL 参数化查询详解 SQL 参数化查询是指在 SQL 语句中使用参数来代替具体的数值,以提高查询效率和安全性。下面对 SQL 参数化查询的原理、优点和实现方式进行详细解释。 SQL 参数化查询的原理 传统的 SQL 语句都...

    参数化查询优化旨在大幅减少优化时间并尽可能减少查询计划执行的次优性,那究竟如何实现参数化查询的有效优化

    ### 参数化查询优化的核心概念与实现 #### 一、参数化查询优化的背景与意义 在数据库管理系统(DBMS)中,参数化查询是指一类具有相同SQL查询模板但其谓词绑定的操作数(即参数)可能不同的查询。这类查询在实际...

    C# 查询参数化例子

    在C#编程中,参数化查询是一种非常重要的技术,它能有效地防止SQL注入攻击,并提高代码的可读性和可维护性。在这个"C#查询参数化例子"中,我们将深入探讨如何在C#中使用参数化查询,特别是通过存储过程来执行这样的...

    浅析SqlServer参数化查询[参考].pdf

    SqlServer 参数化查询详解 在本文中,我们将深入浅析 Sql Server 参数化查询的重要性,Dispelling 两个常见的误解,并探讨参数化查询的正确编写方式,以提高 SQL 执行速度。 错误认识 1: 参数化查询仅用于防止 SQL...

    SQLServer2008参数化查询[参照].pdf

    SQL Server 2008参数化查询是一种优化技术,它允许数据库引擎重用查询计划,减少内存使用,并提高性能。参数化查询的核心在于,通过使用参数而不是直接的值,SQL Server能够创建一个通用的查询计划,这个计划可以...

    ado.net操作oracle简单参数化sql操作

    参数化查询是通过使用参数占位符而不是直接将值插入SQL语句来实现的,这有助于防止SQL注入。在ADO.NET中,我们使用OracleCommand对象来执行SQL命令,并通过OracleParameter对象来定义参数。假设我们有一个查询,需要...

    SQL Server 2008 参数化查询

    SQL Server 2008 参数化查询

    浅析SQL Server参数化查询

    SQL Server参数化查询是一种编程技术,它允许开发者创建可重用的SQL语句,其中的变量部分通过参数来传递。这种技术对优化查询性能、防止SQL注入攻击以及提高代码的可读性和可维护性有着重要作用。 错误认识1:在...

    参数化查询.exe

    参数化查询.exe

    SqlServer参数化查询之where in和like实现详解

    在SQL Server中,参数化查询是一种优化查询性能的重要方法,尤其是在处理大量数据时。它能够防止SQL注入攻击,并且能够更好地利用数据库的查询缓存,提高执行效率。本文将详细讲解如何实现`WHERE IN`和`LIKE`操作的...

    SqlServer:使用IN()子句C#进行参数化查询

    标题中的“SqlServer:使用IN()子句C#进行参数化查询”指的是在SQL Server数据库中,使用C#编程语言来构建一个参数化的查询,该查询涉及到SQL的IN操作符。IN操作符允许我们在WHERE子句中指定一个值列表,查询满足...

    SqlServer参数化查询之where in和like实现之xml和DataTable传参介绍

    在SQL Server中,参数化查询是一种安全且高效的执行SQL语句的方式,它可以防止SQL注入攻击并提高查询性能。本文将重点讨论如何通过XML和DataTable来实现参数化查询中的`WHERE IN`和`LIKE`操作。 首先,让我们回顾...

    SQLServer 参数化查询经验分享

    什么是参数化查询? 一个简单理解参数化查询的方式是把它看做只是一个T-SQL查询,它接受控制这个查询返回什么的参数。通过使用不同的参数,一个参数化查询返回不同的结果。要获得一个参数化查询,你需要以一种特定的...

    asp.net和asp下ACCESS的参数化查询

    今天我就把我用ACCESS参数化查询的一些方法和经验和大家分享 希望对大家有所启发,有写的不对的地方希望高手们多多指教 ASP.NET 用OleDbCommand的new OleDbParameter创建参数货查询 ASP用Command的CreateParameter...

Global site tag (gtag.js) - Google Analytics