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和Mysqlweb应用开发核心技术-第1部分 Php基础-2 php语言介绍
Jul 03 PHP
分享8个最佳的代码片段在线测试网站
Jun 29 PHP
php设计模式之单例模式使用示例
Jan 20 PHP
PHP strtotime函数用法、实现原理和源码分析
Feb 04 PHP
PHP版本如何选择?应该使用哪个版本?
May 13 PHP
CI(Codeigniter)的Setting增强配置类实例
Jan 06 PHP
PHP使用星号隐藏用户名,手机和邮箱的实现方法
Sep 22 PHP
php中namespace及use用法分析
Dec 06 PHP
PHP函数rtrim()使用中的怪异现象分析
Feb 24 PHP
浅谈PHP的反射API
Feb 26 PHP
解决laravel5.4下的group by报错的问题
Oct 16 PHP
PHPstorm启用自动换行的方法详解(IDE)
Sep 17 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调用wsdl文件类型的接口代码分享
2014/11/19 PHP
PHP云打印类完整示例
2016/10/15 PHP
JavaScript中Object和Function的关系小结
2009/09/26 Javascript
JavaScript中的作用域链和闭包
2012/06/30 Javascript
Jquery submit()无法提交问题
2013/04/21 Javascript
兼容最新firefox、chrome和IE的javascript图片预览实现代码
2014/08/08 Javascript
完美兼容各大浏览器的jQuery插件实现图片切换特效
2014/12/12 Javascript
jQuery插件jquery-barcode实现条码打印的方法
2015/11/25 Javascript
总结在前端排序中遇到的问题
2016/07/19 Javascript
JavaScript实现简单的星星评分效果
2017/05/18 Javascript
JS实现的简单表单验证功能完整实例
2017/10/14 Javascript
vue 项目build错误异常的解决方法
2019/04/22 Javascript
node读写Excel操作实例分析
2019/11/06 Javascript
你知道JavaScript Symbol类型怎么用吗
2020/01/08 Javascript
JS实现长图上下滚动效果
2020/03/19 Javascript
vue 如何使用递归组件
2020/10/23 Javascript
vue-cli中实现响应式布局的方法
2021/03/02 Vue.js
[02:39]DOTA2英雄基础教程 极限穿梭编织者
2013/12/05 DOTA
python中反射用法实例
2015/03/27 Python
python实现文件快照加密保护的方法
2015/06/30 Python
python+selenium实现163邮箱自动登陆的方法
2017/12/31 Python
使用Python进行体育竞技分析(预测球队成绩)
2019/05/16 Python
详解python中__name__的意义以及作用
2019/08/07 Python
详解Matplotlib绘图之属性设置
2019/08/23 Python
HTML5新特性之用SVG绘制微信logo
2016/02/03 HTML / CSS
印尼穆斯林时尚购物网站:Hijabenka
2016/12/10 全球购物
Tomcat Mysql datasource数据源配置
2015/12/28 面试题
个人自荐书
2013/12/20 职场文书
工程专业毕业生自荐信范文
2013/12/25 职场文书
党员公开承诺践诺书
2014/03/25 职场文书
临床医师个人自我评价
2014/04/06 职场文书
计算机毕业生求职信
2014/06/10 职场文书
捐款感谢信
2015/01/20 职场文书
nginx网站服务如何配置防盗链(推荐)
2021/03/31 Servers
SQL Server连接查询的实用教程
2021/04/07 SQL Server
SQL之各种join小结详细讲解
2021/08/04 MySQL