精华内容
下载资源
问答
  • 任何其他查询部分(如SQL关键字,表或字段名或运算符)都必须通过白名单筛选。所以,由于您的示例涉及数据文本,那么所有变量都必须通过占位符(也称为参数)添加。 要执行此操作:在SQL语句中,用占位符替换所有变量...

    匿名用户

    在任何MySQL语句中添加PHP变量的规则非常简单明了:任何表示SQL数据文本(或者,简单地说,SQL字符串或数字)的变量都必须通过准备好的语句添加。 没有例外。

    任何其他查询部分(如SQL关键字,表或字段名或运算符)都必须通过白名单筛选。

    所以,由于您的示例只涉及数据文本,那么所有变量都必须通过占位符(也称为参数)添加。 要执行此操作:在SQL语句中,用占位符替换所有变量

    准备结果查询

    将变量绑定到占位符

    执行查询

    下面是如何使用所有流行的PHP数据库驱动程序来实现此操作:

    这样的驱动程序不存在。$type = 'testing';

    $reporter = "John O'Hara";

    $query = "INSERT INTO contents (type, reporter, description)

    VALUES(?, ?, 'whatever')";

    $stmt = $mysqli->prepare($query);

    $stmt->bind_param("ss", $type, $reporter);

    $stmt->execute();

    代码有点复杂,但是所有这些操作符的详细解释可以在我的文章中找到,如何使用Mysqli运行插入查询,以及一个大大简化该过程的解决方案。$type = 'testing';

    $reporter = "John O'Hara";

    $query = "INSERT INTO contents (type, reporter, description)

    VALUES(?, ?, 'whatever')";

    $stmt = $pdo->prepare($query);

    $stmt->execute([$type, $reporter]);

    在PDO中,我们可以将绑定和执行部分组合在一起,这是非常方便的。 PDO还支持命名占位符,有些人觉得这非常方便。

    但有时我们添加了一个变量,它表示查询的另一部分,如关键字或标识符(数据库,表或字段名)。 在这种情况下,必须对照脚本中显式写入的值列表检查变量。 在我的另一篇文章中解释了这一点,根据用户的选择在ORDER BY子句中添加一个字段名:

    不幸的是,PDO没有标识符(表名和字段名)的占位符,因此开发人员必须手动过滤它们。 这种过滤器通常被称为“白名单”(我们只列出允许的值),而不是“黑名单”(我们列出不允许的值)。

    所以我们必须在PHP代码中显式地列出所有可能的变体,然后从中进行选择。

    下面是一个例子:$orderby = $_GET['orderby'] ?: "name"; // set the default value

    $allowed = ["name","price","qty"]; // the white list of allowed field names

    $key = array_search($orderby, $allowed, true); // see if we have such a name

    if ($key === false) {

    throw new InvalidArgumentException("Invalid field name");

    }

    完全相同的方法应该用于方向,$direction = $_GET['direction'] ?: "ASC";

    $allowed = ["ASC","DESC"];

    $key = array_search($direction, $allowed, true);

    if ($key === false) {

    throw new InvalidArgumentException("Invalid ORDER BY direction");

    }

    在这样的代码之后,可以安全地将$direction和$orderby变量放入SQL查询中,因为它们要么等于允许的变量之一,要么会引发错误。

    关于标识符,最后要提到的是,它们还必须根据特定的数据库语法进行格式化。 对于MySQL,标识符周围应该是backtick字符。 因此,我们的order by示例的最终查询字符串将是$query = "SELECT * FROM `table` ORDER BY `$orderby` $direction";

    展开全文
  • C#编程经验技巧宝典

    热门讨论 2008-06-01 08:59:33
    104 <br>0171 如何只允许输入指定图片格式 105 <br>0172 如何设置录入图片统一图片大小 105 <br>5.4 数组处理技巧 105 <br>0173 如何转换数组类型 105 <br>0174 如何复制数组中一系列元素的...
  • PROJECT 2007宝典 9/9

    2012-04-01 19:13:00
    本书最后的部分介绍如何自定义Project以及宏和VBA的相关信息,并通过一些案例来帮助您了解Project的使用情况。  本书内容丰富,融合了作者大量的实践经验,适用于各类项目管理人员使用。 目录 -------------------...
  • JAVA面试题最全集

    2010-03-13 13:09:10
    向编辑框中输入字符时,如何控制输入整数? 71.描述使用JDBC连接数据库的过程 72.EJB分为几类?什么是BMP,CMP? 73.什么是JNDI? 74.ADO是什么?ActiveX数据对象,是一个应用级程序接口. 75.四种JDBC方式?目前的...
  • 6.1 Excel如何处理日期和时间 6.1.1 了解日期序列号 6.1.2 输入日期 6.1.3 理解时间序列号 6.1.4 输入时间 6.1.5 日期和时间的格式化 6.1.6 有关日期的问题 6.2 日期函数 6.2.1 显示当前日期 6.2.2 显示...
  • 6.1 Excel如何处理日期和时间 6.1.1 了解日期序列号 6.1.2 输入日期 6.1.3 理解时间序列号 6.1.4 输入时间 6.1.5 日期和时间的格式化 6.1.6 有关日期的问题 6.2 日期函数 6.2.1 显示当前日期 6.2.2 显示...
  • MAPGIS地质制图工具

    2013-05-06 16:15:30
    是否从选择集中筛选:指在参数筛选后的选择集中再次筛选,默认否。 运算符-全部:选择此项后,指可以不选择。指满足所有参数字段的条件。比如颜色是指全部颜色。 B、对于属性筛选图元:在筛选图元对话框中①列表框中...
  • VBSCRIPT中文手册

    热门讨论 2010-11-12 10:13:06
    Filter 函数 根据指定的筛选条件,返回含有字符串数组子集的、下限为 0 的数组。 FirstIndex 属性 返回字符串匹配的位置。 Fix 函数 返回数的整数部分。 For...Next 语句 以指定的次数重复一组语句。 For Each......
  • iPhone开发秘籍(第2版)--源代码

    热门讨论 2012-12-11 13:51:22
    此外,还结合实例讲解了如何开发各种iphone特性,包括视图、视图控制器、警告、表格、媒体、控件、人物、位置和事件。  《iphone开发秘籍(第2版)》适合iphone和mac开发人员。 作译者 作者:(美国)萨丹(Erica ...
  • vb Script参考文档

    2009-07-28 22:13:02
    Filter 函数 根据指定的筛选条件,返回含有字符串数组子集的、下限为 0 的数组。 FirstIndex 属性 返回字符串匹配的位置。 Fix 函数 返回数的整数部分。 For...Next 语句 以指定的次数重复一组语句。 For Each......
  • 在本文中,我们将了解如何通过将 http://yoursite.com/info/dispEmployeeInfo.aspx?EmpID=459-099&type=summary 替换为类似于 http://yoursite.com/people/sales/chuck.smith 的网址,使用 URL 重写将那些冗长的 URL...
  • VBSCRIP5 -ASP用法详解

    2010-09-23 17:15:46
    如何操作呢?单击左边任意一个标题,即可显示该标题所包含的项目列表。从该列表中选择要查看的主题。打开所选主题之后,就能够很容易地链接到其他相关章节。 好了,现在就开始行动,赶快进去看一看吧!学习几个语句...
  • 每个实例都是经过笔者精心筛选的,具有很强的实用性,其中一些实例是开发人员难于寻觅的解决方案。  本书适合Visual Basic的初学者,如高校学生、求职人员作为练习、速查、学习使用,也适合Visual Basic程序员参考...
  • Visual Studio程序员箴言中文扫描PDF

    热门讨论 2010-12-28 01:04:18
    技巧1.26 将宏绑定到键盘快捷键(或者说,如何快速增大或减小文本编辑器的字体大小) 17 1.3.2 字体和颜色 17 技巧1.27 将编辑器背景改为黑色 17 技巧1.28 “工具”→“选项”→“环境”→“字体和颜色”中...
  • 1.16 筛选序列中的元素 26 1.17 从字典中提取子集 29 1.18 将名称映射到序列的元素中 30 1.19 同时对数据做转换和换算 33 1.20 将多个映射合并为单个映射 34 第2章 字符串和文本 37 2.1 针对任意多的分隔符拆分字符...
  • Visual Studio程序员箴言--详细书签版

    热门讨论 2012-10-16 20:37:39
    第5章 了解更多的设计工具(第1部分) 101 5.1 “工具”窗口 101 5.1.1 命令窗口 101 技巧5.1 从“命令”窗口运行Visual Studio命令 101 技巧5.2 在“命令”窗口”中进行搜索 102 技巧5.3 记录“命令”窗口...
  • 【综合计算显示】 综合计算并显示选中区域存储格的最大值、最小值、平均值、求和、存储格个数、筛选状态下的的加总求和,以及显示选区包含的数字、字符、汉字的个数等信息。 【GB2转BIG5】 将选中区域存储格的简体...
  • 全书体积较大,压缩打包成3部分,这是第1部分。 注:本系列图书的第I、II卷再版时均相应改名为《xxx开发实例大全》(基础卷)及(提高卷),但内容基本无变化,需要的童鞋可自由匹配查找。 内容简介  《Visual C++...
  • 全书体积较大,压缩打包成3部分,这是第2部分。 注:本系列图书的第I、II卷再版时均相应改名为《xxx开发实例大全》(基础卷)及(提高卷),但内容基本无变化,需要的童鞋可自由匹配查找。 内容简介  《Visual C++...
  • 全书体积较大,压缩打包成3部分,这是第3部分。 注:本系列图书的第I、II卷再版时均相应改名为《xxx开发实例大全》(基础卷)及(提高卷),但内容基本无变化,需要的童鞋可自由匹配查找。 内容简介  《Visual C++...
  • 其中使用Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持,Spring做管理,管理Struts和Hibernate。 WebStorage HTML新增的本地存储解决...
  • 需凭借一个电子表格,他就能够在最短的时间内将数千行的交易数据变成有意义的摘要报告。Bill Jelen是一名卓有成就的Excel图书作者。还是加拿大电视节目的嘉宾。在世界各地的会计俱乐部常常能够见到Bill的身影,那...
  • 全书压缩打包成3部分,这是第2部分。 注:本系列图书的第I、II卷再版时均相应改名为《xxx开发实例大全》(基础卷)及(提高卷),但内容基本无变化,需要的童鞋可自由匹配查找。 内容简介  《Java Web开发实战1200例...
  • 我们将感兴趣的部分传入 action 函数而已。 所以,是 event 响应函数里主动调用了 action 函数,并且传入它需要的数据。 为什么要有 reducer ? <p>action 仅仅是预处理,将脏数据筛选掉,...
  • 4.7 如何定义对象27 4.7.1 属性27 4.7.2 方法28 4.7.3 事件28 4.8 习题29 第5章 脚本和HTML文档30 5.1 脚本放在文档何处30 5.1.1 script标记30 5.1.2 标记位置31 5.1.3 处理旧版本的浏览器32 5.2 JavaScript语句32 ...
  • 《C#开发实例大全(基础卷)》筛选、汇集了C#开发从基础知识到高级应用各个层面约600个实例及源代码,每个实例都按实例说明、关键技术、设计过程、详尽注释、秘笈心法的顺序进行了分析解读。全书分6篇共25章,主要...
  • 企业筛选人才的名词用词大致定位,虽无法百分百绝对正确,但这些条件至少过滤较为多数部分不匹配者,减少了必要的面试等,并提高了自身用人的办事效率,节约了很多成本(比如说:多数纸张以及计算机运作成本)。...
  • jQuery详细教程

    2013-04-25 14:16:42
    如何隐藏部分文本。 <script type="text/javascript" src="/jquery/jquery.js"></script> $(document).ready(function(){ $(".ex .hide").click(function(){ $(this).parents(".ex").hide("slow"); }); }); ...
  • oracle数据库经典题目

    2011-02-17 15:05:20
    列级约束是字段定义的一部分能够应用在一个列上;而表级约束的定义独立于列的定义,它可以应用于一个表中的多个列。 13.填写下面的语句,使其可以为Class表的ID列添加一个名为PK_CLASS_ID的主键约束。 ALTER ...
  • 使一个Dom对象成为一个Jquery对象很简单,通过下面一些方式(只是一部分): 代码 var a = $("#cid"); var b = $("<p>hello</p>"); var c = document.createElement("table"); var tb = $(c); 编辑本段代替body...

空空如也

空空如也

1 2
收藏数 31
精华内容 12
关键字:

如何只替换筛选部分