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

5年以前  |  阅读数:1097 次  |  编程语言:PHP 

本文实例讲述了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相关内容感兴趣的读者可查看本站专题:《PHP基于pdo操作数据库技巧总结》、《php+Oracle数据库程序设计技巧总结》、《PHP+MongoDB数据库操作技巧大全》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总

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

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例