这篇文章主要介绍了PHP数据对象PDO操作方法,结合实例形式总结分析了php基于pdo的各种常见数据库操作相关与注意事项,需要的朋友可以参考下

本文实例讲述了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程序设计有所帮助。

最新资讯
电子烟巨头登陆港股 思摩尔国际首日暴涨150%

电子烟巨头登陆港股

随着电子烟制造商思摩尔国际正式登陆港交所,中国电子烟
上半年房企“零入门”长租公寓迎来新一轮洗牌

上半年房企“零入门”

原标题:上半年房企“零入门”,长租公寓迎来新一轮洗牌来
短视频电商化:抖音向“钱”快手向“上”

短视频电商化:抖音向“

短视频双雄抖音和快手之间的竞争已经从短视频蔓延到了
马斯克身家超越股神巴菲特 晋升全球第七大富豪

马斯克身家超越股神巴

马斯克目前是全球第七大富豪,排名超越了股神巴菲特,也领
数据虚高 刷单造假等亟须整顿

数据虚高 刷单造假等

与此同时,也暴露出夸大宣传以及商品质量和售后服务难保
蜜芽突围自救 会员体系“新瓶装旧酒”

蜜芽突围自救 会员体

蜜芽已于今年5月悄然将Plus会员体系变更升级为Pro会员
最新文章
Laravel框架Blade模板简介及模板继承用法分析

Laravel框架Blade模板

这篇文章主要介绍了Laravel框架Blade模板简介及模板继
Laravel框架基础语法与知识点整理【模板变量、输出、include引入子视图等】

Laravel框架基础语法

这篇文章主要介绍了Laravel框架基础语法与知识点整理,
Laravel框架Eloquent ORM删除数据操作示例

Laravel框架Eloquent

这篇文章主要介绍了Laravel框架Eloquent ORM删除数据
Laravel框架下载,安装及路由操作图文详解

Laravel框架下载,安装

这篇文章主要介绍了Laravel框架下载,安装及路由操作,结
Laravel框架Eloquent ORM修改数据操作示例

Laravel框架Eloquent

这篇文章主要介绍了Laravel框架Eloquent ORM修改数据
Laravel框架控制器,视图及模型操作图文详解

Laravel框架控制器,视

这篇文章主要介绍了Laravel框架控制器,视图及模型操作,