PHP数据对象PDO操作技巧小结


Posted in PHP onSeptember 27, 2016

本文实例讲述了PHP数据对象PDO操作技巧。分享给大家供大家参考,具体如下:

PHP 数据对象 (PDO) 扩展为PHP访问数据库定义了一个轻量级的一致接口。

<?php
 try {
  $dsn = "mysql:host=localhost; port=3306; dbname=wsq_hotel; charset=utf-8";
  $user = 'root';
  $psw ='root';
  $pdo = new PDO($dsn,$user,$psw);
  $sql = 'select goods_prices from wsq_goods_info where goods_id=2';
  // $sql = "show database";
  $res = $pdo->query($sql) or var_dump($pdo->errorInfo());
  // var_dump($res);
  $mon = $res->fetch(PDO::FETCH_ASSOC);
  echo $mon['goods_price'];
 } catch (PDOException $e) {
  echo $e->getMessage();
 }
?>

PDO操作事务

//开启事务
beginTransacition()
//回滚
rollback()
//提交
commit()
//判断是否处于事务之中
inTransaction()

返回最后插入行的ID

PDO::lastInsertID()

exec()执行

与query()相比,exec()返回的是受影响行数

$sql = "insert into table values('$val')";
if(false===$pdo->exec($sql)){
 echo '执行失败';
}

PDO实现预编译

指的是预先编译sql的结构的一种执行sql的语法

如果执行多条结构相同的sql,编译的中间结果(语法树)应该也是一致的,因此可以将相同的结构,统一编译,每次使用不同的数据执行即可。

编译统一的结构

$pdoStatement = $pdo->prepare(sql结构)

绑定数据到中间编译结果

$pdoStatement ->bindValue()

执行

$pdoStatement ->execute()
//$sql = "insert into table values(null,?)";
$sql = "insert into table values(null,:name)";
$stmt = $pdo->prepare($sql);
//多组数据也是一编译一执行
//$stmt->bindValue(1,'bee');
$stmt->bindValue(':name','bee');
$res = $stmt->execute();
var_dump($res);

预编译能更好地防止sql注入,是因为预编译时候不需要用户的数据参与,因此编译时结构固定,所以数据不影响到sql结构。

$pdo->query()与$pdo->execute()如果需要防止sql注入,可以使用$pdo->quote()(其作用是先转义后加引号)

PDOstatement常用方法:

errorInfo()
errorCode()
fetchColumn()
fetch()
fetchAll()
rowCount()
closeCursor()

pdo应用

<?php
header('content-type:text/html;charset=utf-8');
 class PDODB{
  static private $_init;
  private $_host;
  private $_port;
  private $_dbname;
  private $_username;
  private $_password;
  private $_charset;
  private $_dns;
  private $_pdo;
  private function __construct($config){
   $this->_initParamas($config);
   $this->_initDNS();
   $this->_initDriverOptions();
   $this->_initPDO();
  }
  private function __clone(){}
  static public function getInstance($config){
   if(!static::$_init instanceof static){
    static::$_init = new static($config);
   }
   return static::$_init;
  }
  private function _initParamas($config){
   $this->_host = isset($config['host'])?$config['host']:'localhost';
   $this->_port = isset($config['port'])?$config['port']:'3306';
   $this->_dbname = isset($config['dbname'])?$config['dbname']:'';
   $this->_username = isset($config['username'])?$config['username']:'root';
   $this->_passward = isset($config['passward'])?$config['passward']:'';
   $this->_charset = isset($config['charset'])?$config['charset']:'utf8';
  }
  private function _initDNS(){
   $this->_dns = "mysql:host=$this->_host;port=$this->_port;dbname=$this->_dbname";
  }
  private function _initDriverOptions(){
   $this->_driverOptions = array(
    PDO::MYSQL_ATTR_INIT_COMMAND => "set names $this->_charset"
   );
  }
  private function _initPDO(){
   $this->_pdo = new PDO($this->_dns,$this->_username,$this->_passward,$this->_driverOptions) or die("fail");
  }
  public function query($sql){
   if(!$result = $this->_pdo->query($sql)){
    $erro = $this->_pdo->errorInfo();
    echo '失败的语句'.$sql.'<br>';
    echo '错误代码'.$erro[1].'<br>';
    echo '错误信息'.$erro[2].'<br>';
    die;
   }
   return $result;
  }
  public function fetchAll($sql){
   $res = $this->query($sql);
   $list = $res->fetchAll(PDO::FETCH_ASSOC);
   $res->closeCursor();
   return $list;
  }
  public function fetchRow($sql){
   $res = $this->query($sql);
   $row = $res->fetch(PDO::FETCH_ASSOC);
   $res->closeCursor();
   return $row;
  }
  public function fetchOne($sql){
   $res = $this->query($sql);
   $one = $res->fetchColumn();
   $res->closeCursor();
   return $one;
  }
  public function escape_string($data){
   return $this->_pdo->quote($data);
  }
 }
 $config = array(
  "host"=>"localhost",
  "username"=>"root",
  "passward"=>"root",
  "dbname"=>"students"
 );
 $pdo = PDODB::getInstance($config);
 $sql = "select sdept from student where sage=21";
 var_dump($pdo->fetchRow($sql));
?>

运行效果图如下:

PHP数据对象PDO操作技巧小结

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php中使用DOM类读取XML文件的实现代码
Dec 14 PHP
php调用nginx的mod_zip模块打包ZIP文件
Jun 11 PHP
ThinkPHP的cookie和session冲突造成Cookie不能使用的解决方法
Jul 01 PHP
ThinkPHP采用实现三级循环代码实例
Jul 18 PHP
基于命令行执行带参数的php脚本并取得参数的方法
Jan 25 PHP
PHP的PDO常用类库实例分析
Apr 07 PHP
PHP图片加水印实现方法
May 06 PHP
PHP 的比较运算与逻辑运算详解
May 12 PHP
支付宝支付开发――当面付条码支付和扫码支付实例
Nov 04 PHP
THinkPHP获取客户端IP与IP地址查询的方法
Nov 14 PHP
PHPStudy下如何为Apache安装SSL证书的方法步骤
Jan 23 PHP
TP3.2.3框架使用CKeditor编辑器在页面中上传图片的方法分析
Dec 31 PHP
PHP基于GD库的图像处理方法小结
Sep 27 #PHP
PHP文件上传操作实例详解
Sep 27 #PHP
PHP目录操作实例总结
Sep 27 #PHP
PHP文件操作实例总结
Sep 27 #PHP
PHP命名空间namespace用法实例分析
Sep 27 #PHP
PHP7标量类型declare用法实例分析
Sep 26 #PHP
PHP7新增运算符用法实例分析
Sep 26 #PHP
You might like
PHP cron中的批处理
2008/09/16 PHP
PHP5下$_SERVER变量不再受magic_quotes_gpc保护的弥补方法
2012/10/31 PHP
Smarty中常用变量操作符汇总
2014/10/27 PHP
PHP中大括号'{}'用法实例总结
2017/02/08 PHP
jQuery的实现原理的模拟代码 -1 核心部分
2010/08/01 Javascript
Jquery中显示隐藏的实现代码分析
2011/07/26 Javascript
Jquery中LigerUi的弹出编辑框(实现方法)
2013/07/09 Javascript
jQuery的显示和隐藏方法与css隐藏的样式对比
2013/10/18 Javascript
Javascript限制网页只能在微信内置浏览器中访问
2014/11/09 Javascript
浅谈JavaScript的Polymer框架中的behaviors对象
2015/07/29 Javascript
轻松使用jQuery双向select控件Bootstrap Dual Listbox
2015/12/13 Javascript
基于bootstrap-datetimepicker.js不支持IE8的快速解决方法
2016/11/07 Javascript
利用jquery实现验证输入的是否是数字、小数,包含保留几位小数
2016/12/07 Javascript
Vue中添加手机验证码组件功能操作方法
2017/12/07 Javascript
JS解析后台返回的JSON格式数据实例
2018/08/06 Javascript
微信小程序如何调用图片接口API并居中显示
2019/06/29 Javascript
JavaScript setInterval()与setTimeout()计时器
2019/12/27 Javascript
[01:33:30]DOTA2-DPC中国联赛 正赛 RNG vs Phoenix BO3 第二场 2月5日
2021/03/11 DOTA
Python SQLAlchemy基本操作和常用技巧(包含大量实例,非常好)
2014/05/06 Python
对Python 窗体(tkinter)树状数据(Treeview)详解
2018/10/11 Python
python3 批量获取对应端口服务的实例
2019/07/25 Python
python基于三阶贝塞尔曲线的数据平滑算法
2019/12/27 Python
Python yield的用法实例分析
2020/03/06 Python
Django视图、传参和forms验证操作
2020/07/15 Python
django前端页面下拉选择框默认值设置方式
2020/08/09 Python
Canvas实现放大镜效果完整案例分析(附代码)
2020/11/26 HTML / CSS
Kent & Curwen:与大卫·贝克汉姆合作
2017/06/13 全球购物
大学生校园创业计划书
2014/02/08 职场文书
学校后勤岗位职责
2014/02/19 职场文书
股份合作协议书
2014/04/12 职场文书
市场开发与营销专业求职信范文
2014/05/01 职场文书
户外宣传策划方案
2014/05/25 职场文书
小学网上祭英烈活动总结
2014/07/05 职场文书
淘宝客服工作职责
2014/07/11 职场文书
法院四风对照检查材料思想汇报
2014/10/06 职场文书
微软Win11有哪些隐藏功能? windows11多个功能汇总
2021/11/21 数码科技