温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

PHP数据对象PDO操作技巧有哪些

发布时间:2021-08-31 14:32:40 来源:亿速云 阅读:139 作者:小新 栏目:开发技术

这篇文章将为大家详细讲解有关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数据对象PDO操作技巧有哪些”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI