SQL注入是一个常见的问题,当一个新的或没有经验的开发人员编写的代码很容易受到攻击。PHP是最容易访问的编程语言之一,但是这常常导致不安全的代码或不好的实践。

PDO (PHP数据对象)是一个数据库抽象层,它允许您快速而安全地处理许多不同类型的数据库。这使您能够使用相同的代码支持多种类型的数据库,并通过使用准备好的语句保护您免受SQL注入。

数据库抽象层通过API提供所有功能来隐藏与数据库的交互。所有这一切基本上意味着,您通过一个单独的层与数据库通信,该层处理所有的复杂性和处理。

PHP手册上说得很清楚:

准备好的语句和存储过程

许多更成熟的数据库支持预处理语句的概念。他们是什么?它们可以被看作是应用程序想要运行的SQL的一种已编译的模板,可以使用变量参数对其进行定制。书面陈述有两个主要好处:

查询只需要解析(或准备)一次,但是可以使用相同或不同的参数执行多次。准备好查询后,数据库将分析、编译和优化执行查询的计划。对于复杂的查询,如果需要多次使用不同的参数重复相同的查询,那么这个过程可能会占用大量的时间,从而显著降低应用程序的运行速度。通过使用准备好的语句,应用程序可以避免重复分析/编译/优化循环。这意味着准备好的语句使用更少的资源,因此运行速度更快。

准备好的语句的参数不需要加引号;驱动程序自动处理这个。如果应用程序只使用准备好的语句,开发人员可以确保不会发生SQL注入(但是,如果查询的其他部分是用未转义的输入构建的,那么仍然可以进行SQL注入)。

$pdo = new PDO("mysql:host=192.168.0.88;dbname=test;","root");

$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

$st = $pdo->prepare("select * from test where id =? and name = ?");

$id = 100;

$name = 'jack';

$st->bindParam(1,$id);

$st->bindParam(2,$name);

$st->execute();

$st->fetchAll();

?>

5.0

01

Post Views:

367

php pdo sql注入,PHP PDO是如何防止SQL注入的?相关推荐

  1. mysql pdo 安全_使用PDO查询Mysql来避免SQL注入风险

    当 我们使用传统的 mysql_connect .mysql_query方法来连接查询数据库时,如果过滤不严,就有SQL注入风险,导致网站被攻击,失 去控制.虽然可以用mysql_real_escap ...

  2. php pdo 更新sql语句,增删改查sql语句及PDO数据库连接操作流程实例-2019年7月24日...

    一.增删改查sql语句语法: 增: INSET INTO `表名` SET `字段名`=值 (也可写别名用,值前面加冒号->:别名): 删: DELETE FROM `表名`  WHERE `字 ...

  3. php pdo 预处理删除,PHP PDO扩展整理,包括环境配置\基本增删改查\事务\预处理

    介绍 PDO是一种PHP程序连接数据库的接口,通过PDO可以将PHP程序与数据库联系起来. 优点: 1.可移植性,可以支持各种主流数据库服务,而且实现代码几乎都是相同的,使用PDO在代码层面上不需要太 ...

  4. php pdo 方法,PHP之pdo操作数据库

    PDO概述 1.PDO简介 PDO是PHP数据对象(PHP Data Object)的缩写. PDO扩展为PHP访问不同数据库定义了一个轻量级的.一致性的接口: PDO作用是统一各种数据库的访问接口, ...

  5. php如何防sql注入,如何在PHP中防止SQL注入

    本篇文章将给大家介绍关于PHP中的SQL注入以及使用PHP-MySQLi和PHP-PDO驱动程序防止SQL注入的方法.下面我们来看具体的内容. 简单的SQL注入示例 例如,A有一个银行网站.已为银行客 ...

  6. php pdo 方法,PHP使用PDO修改数据的方法

    PHP使用PDO修改数据的方法 发布时间:2020-06-09 11:31:36 来源:亿速云 阅读:263 作者:Leah 这篇文章给大家分享的是PHP使用PDO修改数据的方法.小编觉得挺实用的,因 ...

  7. php pdo mysql 预处理_php -- PDO预处理

    可以使用多种方式实现预处理:指的是在绑定数据进行执行的时候,可以有多种方式. 预处理语句中为变量 使用数组指定预处理变量 1.准备预处理语句(发送给服务器,让服务器准备预处理语句) PDOStatem ...

  8. php pdo mysql 预处理_PHP PDO mysql 处理类(prepare 预处理)

    使用预处理,动态处理需要操作的字段和值.先使用PDO来动态绑定参数.PDOModel: /** * Description of PDO * * @author Administrator */ cl ...

  9. php pdo的用法,php pdo函数库用法详解

    pdo->begintransaction() - 标明回滚起始点 pdo->commit() - 标明回滚结束点,并执行sql pdo->__construct() - 建立一个p ...

最新文章

  1. ​万字总结83篇文献:深度强化学习之炒作、反思、回归本源
  2. 硅谷“封城”前夜的L4级别无人车试乘实况,及其背后创新技术的深度剖析
  3. 详细解析LTE调度算法
  4. 大华Global Shutter CMOS摄像机剖析
  5. mysql names gb2312_mysql_query(set names gb2312)设置客户端字符集
  6. ABP入门系列(3)——领域层定义仓储并实现
  7. android 预约挂号代码_告别排队!用Python定时自动挂号和快捷查询化验报告
  8. JVM—GC垃圾回收器总结
  9. Windows Mobile Sensors API库的设计
  10. 微信小游戏推荐:又一款H5微信互动小游戏要火啦!
  11. mysql 索引间隙锁_mysql innodb间隙锁示例
  12. Redis的持久化方式
  13. 微软新版Windows定价过高 遭韩国政府调查
  14. tensorflow学习笔记(二十七):leaky relu
  15. php curl curlopt_customrequest,php – 如何重置CURLOPT_CUSTOMREQUEST
  16. IIC 驱动OLED
  17. 不再纠结devDependencies与dependencies
  18. C++实现别踩白块儿(双人版)
  19. 区块链数据的存储和更新
  20. 计算机专业课观后感,计算机公开课观后感

热门文章

  1. java定时轮询_RxJava应用场景之轮询定时任务
  2. 反诈宣传互动答题小程序及其三种玩法
  3. “区块链+社媒”是埋骨地 微博、Telegram为何仍要前赴后继
  4. IOS基础知识-ARC,分类,Block
  5. g2o图优化库入门介绍
  6. Matplotlib常见的图表
  7. pytest 前置后置用法之 Fixture、setup、teardown
  8. 一盘多用的U盘启动盘制作
  9. jQuery循环赋值 取值
  10. CPU上下文切换、进程上下文、中断上下文