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 相关文章推荐
虚拟主机中对PHP的特殊设置
Oct 09 PHP
PHP获得用户使用的代理服务器ip即真实ip
Dec 31 PHP
php minixml详解
Jul 19 PHP
PHP插入排序实现代码
Apr 04 PHP
PHP数据类型之布尔型的介绍
Apr 28 PHP
php截取中文字符串不乱码的方法
Dec 25 PHP
php检测文件编码的方法示例
Apr 25 PHP
ThinkPHP基于PHPExcel导入Excel文件的方法
Oct 15 PHP
php判断邮箱地址是否存在的方法
Feb 13 PHP
PHP的Yii框架入门使用教程
Feb 15 PHP
PHP实现批量清空删除指定文件夹所有内容的方法
May 30 PHP
php使用curl获取header检测开启GZip压缩的方法
Aug 15 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
PHP4与PHP3中一个不兼容问题的解决方法
2006/10/09 PHP
PHP 危险函数解释 分析
2009/04/22 PHP
php feof用来识别文件末尾字符的方法
2010/08/01 PHP
php实现图片转换成ASCII码的方法
2015/04/03 PHP
全面了解PHP中的全局变量
2016/06/17 PHP
PHP实现微信支付(jsapi支付)流程步骤详解
2018/03/15 PHP
php获取用户真实IP和防刷机制的实例代码
2018/11/28 PHP
学习js所必须要知道的一些
2007/03/07 Javascript
网页打开自动最大化的js代码
2012/08/22 Javascript
js 动态修改css文件用到了cssRule
2014/08/20 Javascript
JavaScript移除数组内重复元素的方法
2015/03/18 Javascript
将页面table内容与样式另存成excel文件的方法
2015/08/05 Javascript
Bootstrap多级导航栏(级联导航)的实现代码
2016/03/08 Javascript
js 开发之autocomplete=&quot;off&quot;在chrom中失效的解决办法
2017/09/28 Javascript
JavaScript自执行函数和jQuery扩展方法详解
2017/10/27 jQuery
vue.js的computed,filter,get,set的用法及区别详解
2018/03/08 Javascript
详解nodejs 配置文件处理方案
2019/01/02 NodeJs
浅谈vue中$bus的使用和涉及到的问题
2020/07/28 Javascript
vue+elementUI 实现内容区域高度自适应的示例
2020/09/26 Javascript
js实现缓动动画
2020/11/25 Javascript
[01:04:01]2014 DOTA2华西杯精英邀请赛5 24 DK VS VG
2014/05/25 DOTA
python数据处理实战(必看篇)
2017/06/11 Python
python使用Plotly绘图工具绘制水平条形图
2020/03/25 Python
用Python实现将一张图片分成9宫格的示例
2019/07/05 Python
python实现两个一维列表合并成一个二维列表
2019/12/02 Python
史泰博(Staples)中国官方网站:办公用品一站式采购
2016/09/05 全球购物
澳大利亚最受欢迎的美发用品目的地:AMR
2019/08/28 全球购物
意大利在线眼镜精品店:Ottica Lipari
2019/11/11 全球购物
应届生高等护理求职信
2013/10/12 职场文书
kfc实习自我鉴定
2013/12/14 职场文书
集团公司人力资源部岗位职责
2014/01/03 职场文书
党的群众路线教育实践活动对照检查材料思想汇报(党员篇)
2014/09/25 职场文书
2015秋季幼儿园开学寄语
2015/03/25 职场文书
2015年监理个人工作总结
2015/05/23 职场文书
银行客户经理培训心得体会
2016/01/09 职场文书
Nginx隐藏式跳转(浏览器URL跳转后保持不变)
2022/04/07 Servers