PHP PDO数据库操作预处理与注意事项


Posted in PHP onMarch 16, 2019

PDO(PHP Database Object)扩展为PHP访问数据库定义了一个轻量级的、一致性的接口,它提供了一个数据访问抽象层,这样,无论使用什么数据库,都可以通过一致的函数执行查询和获取数据。在数据库操作方面更加安全更加高效!

PDO为PHP访问各类数据库定义了一个轻量级一致性的接口,无论什么数据库,都可以通过一致的方法执行查询和获取数据,而不用考虑不同数据库之间的差异,大大简化了数据库操作。使用PDO可以支持mysql、postgresql、oracle、mssql等多种数据库。

什么是预处理?

成熟的数据库都支持预处理语句(Prepared Statements)的概念。

它们是什么东西?你可以把它们想成是一种编译过的要执行的SQL语句模板,可以使用不同的变量参数定制它。

预处理语句具有两个主要的优点:

1、查询只需要被解析(或准备)一次,但可以使用相同或不同的参数执行多次。当查询准备好(Prepared)之后,数据库就会分析,编译并优化它要执行查询的计划。

对于复杂查询来说,如果你要重复执行许多次有不同参数的但结构相同的查询,这个过程会占用大量的时间,使得你的应用变慢。

通过使用一个预处理语句你就可以避免重复分析、编译、优化的环节。简单来说,预处理语句使用更少的资源,执行速度也就更快。

2、传给预处理语句的参数不需要使用引号,底层驱动会为你处理这个。

如果你的应用独占地使用预处理语句,你就可以确信没有SQL注入会发生。

代码演示:

<?php
header('content-type:text/html; charset=utf-8');
//实例化pdo对象
$pdo = new PDO('mysql:host=127.0.0.1;port=3306;dbname=test;', 'root', '888888');
//通过query函数执行sql命令
$pdo->query('set names utf8');
//插入数据
$sql  = "insert into persons (name,age) values (?, ?);";
$preObj = $pdo->prepare($sql);
$res  = $preObj->execute(array('小明', 22));
var_dump($res);
//删除数据
$sql = "delete from persons where id = ?";
$preObj = $pdo->prepare($sql);
$res  = $preObj->execute(array(3));
var_dump($res);
//修改数据
$sql = "update persons set name = ? where id = ?;";
$preObj = $pdo->prepare($sql);
$res  = $preObj->execute(array('lucy', 5));
var_dump($res);
//查询数据
$sql = "select * from persons where age > ? order by id desc;";
$preObj = $pdo->prepare($sql);
$preObj->execute(array(20));
$arr = $preObj->fetchAll(PDO::FETCH_ASSOC);
/*
 * FETCH_BOTH   是默认的,可省,返回关联和索引。
 * FETCH_ASSOC   参数决定返回的只有关联数组。
 * PDO::FETCH_NUM 返回索引数组
 * PDO::FETCH_OBJ 返回由对象组成的二维数组
 */
print_r($arr);

如果当你使用pdo预处理插入一条数据时候,报错

<?php
$dsn = 'mysql:dbname=test;host=127.0.0.1';
$user = 'root';
$password = '';
try {
  $dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
  echo 'Connection failed: ' . $e->getMessage();
}
/* Execute a prepared statement by passing an array of values */
$sth = $dbh->prepare('INSERT INTO room (create_time,create_uid,exp_time,is_private) VALUES (?,?,?,?)');
$rs = $sth->execute(["2018-05-14 14:10:04",0,1526278504,1]);
var_dump($sth->errorInfo());exit;

报错

array (size=3)
  0 => string 'HY000' (length=5)
  1 => int 1364
  2 => string 'Field 'id' doesn't have a default value' (length=39)

这是由于你设计的表的主键没有auto_increment

解决方法

可以加入自增长或者预处理语句中加入主键字段

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

PHP 相关文章推荐
ZF等常用php框架中存在的问题
Jan 10 PHP
php5 图片验证码实现代码
Dec 11 PHP
深入PHP magic quotes的详解
Jun 17 PHP
解析PHP对现有搜索引擎的调用
Jun 25 PHP
Yii使用CLinkPager分页实例详解
Jul 23 PHP
php实现字符串反转输出的方法
Mar 14 PHP
PHP+MYSQL中文乱码问题
Jul 01 PHP
php集成动态口令认证
Jul 21 PHP
PHP实现接收二进制流转换成图片的方法
Jan 10 PHP
PHP那些琐碎的知识点(整理)
May 20 PHP
PHP使用栈解决约瑟夫环问题算法示例
Aug 27 PHP
php中的buffer缓冲区用法分析
May 31 PHP
php生成word并下载代码实例
Mar 15 #PHP
PHP-FPM的配置与优化讲解
Mar 15 #PHP
php-fpm中max_children的配置
Mar 15 #PHP
使用Zookeeper分布式部署PHP应用程序
Mar 15 #PHP
php根据命令行参数生成配置文件详解
Mar 15 #PHP
详解PHP的抽象类和抽象方法以及接口总结
Mar 15 #PHP
PHP基于面向对象封装的分页类示例
Mar 15 #PHP
You might like
PHP+MySQL5.0中文乱码解决方法
2006/11/20 PHP
PHP中strncmp()函数比较两个字符串前2个字符是否相等的方法
2016/01/07 PHP
thinkPHP简单实现多个子查询语句的方法
2016/12/05 PHP
PHP常见字符串处理函数用法示例【转换,转义,截取,比较,查找,反转,切割】
2016/12/24 PHP
自适应图片大小的弹出窗口
2006/07/27 Javascript
一些常用的JS功能函数(2009-06-04更新)
2009/06/04 Javascript
AngularJs表单验证实例详解
2016/05/30 Javascript
微信小程序使用第三方库Underscore.js步骤详解
2016/09/27 Javascript
详解用node.js实现简单的反向代理
2017/06/26 Javascript
vue如何集成raphael.js中国地图的方法示例
2017/08/15 Javascript
详解从Vue.js源码看异步更新DOM策略及nextTick
2017/10/11 Javascript
vue中使用localstorage来存储页面信息
2017/11/04 Javascript
js删除数组中的元素delete和splice的区别详解
2018/02/03 Javascript
Vue.js 踩坑记之双向绑定
2018/05/03 Javascript
vue2.0实现的tab标签切换效果(内容可自定义)示例
2019/02/11 Javascript
node链接mongodb数据库的方法详解【阿里云服务器环境ubuntu】
2019/03/07 Javascript
[44:09]DOTA2上海特级锦标赛A组小组赛#1 EHOME VS MVP.Phx第二局
2016/02/25 DOTA
python二叉树的实现实例
2013/11/21 Python
python统计文本文件内单词数量的方法
2015/05/30 Python
详解Python3除法之真除法、截断除法和下取整对比
2019/05/23 Python
python执行scp命令拷贝文件及文件夹到远程主机的目录方法
2019/07/08 Python
简单分析python的类变量、实例变量
2019/08/23 Python
python3 map函数和filter函数详解
2019/08/26 Python
python 实现将Numpy数组保存为图像
2020/01/09 Python
Python标准库:内置函数max(iterable, *[, key, default])说明
2020/04/25 Python
Python numpy矩阵处理运算工具用法汇总
2020/07/13 Python
Django url 路由匹配过程详解
2021/01/22 Python
eBay荷兰购物网站:eBay.nl
2020/06/26 全球购物
物流专业大学的自我评价
2014/01/11 职场文书
出纳会计岗位职责
2014/03/12 职场文书
五四青年节演讲稿
2014/05/26 职场文书
2014国庆节国旗下演讲稿(精选版)
2014/09/26 职场文书
教师批评与自我批评材料
2014/10/16 职场文书
2015年财务试用期工作总结
2014/12/24 职场文书
创业计划书之烤红薯
2019/09/26 职场文书
Requests什么的通通爬不了的Python超强反爬虫方案!
2021/05/20 Python