亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

PHP數(shù)據(jù)對(duì)象PDO操作技巧小結(jié)

 更新時(shí)間:2016年09月27日 11:28:56   作者:ligbee  
這篇文章主要介紹了PHP數(shù)據(jù)對(duì)象PDO操作方法,結(jié)合實(shí)例形式總結(jié)分析了php基于pdo的各種常見數(shù)據(jù)庫(kù)操作相關(guān)技巧與注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了PHP數(shù)據(jù)對(duì)象PDO操作技巧。分享給大家供大家參考,具體如下:

PHP 數(shù)據(jù)對(duì)象 (PDO) 擴(kuò)展為PHP訪問(wèn)數(shù)據(jù)庫(kù)定義了一個(gè)輕量級(jí)的一致接口。

<?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操作事務(wù)

//開啟事務(wù)
beginTransacition()
//回滾
rollback()
//提交
commit()
//判斷是否處于事務(wù)之中
inTransaction()

返回最后插入行的ID

PDO::lastInsertID()

exec()執(zhí)行

與query()相比,exec()返回的是受影響行數(shù)

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

PDO實(shí)現(xiàn)預(yù)編譯

指的是預(yù)先編譯sql的結(jié)構(gòu)的一種執(zhí)行sql的語(yǔ)法

如果執(zhí)行多條結(jié)構(gòu)相同的sql,編譯的中間結(jié)果(語(yǔ)法樹)應(yīng)該也是一致的,因此可以將相同的結(jié)構(gòu),統(tǒng)一編譯,每次使用不同的數(shù)據(jù)執(zhí)行即可。

編譯統(tǒng)一的結(jié)構(gòu)

$pdoStatement = $pdo->prepare(sql結(jié)構(gòu))

綁定數(shù)據(jù)到中間編譯結(jié)果

$pdoStatement ->bindValue()

執(zhí)行

$pdoStatement ->execute()
//$sql = "insert into table values(null,?)";
$sql = "insert into table values(null,:name)";
$stmt = $pdo->prepare($sql);
//多組數(shù)據(jù)也是一編譯一執(zhí)行
//$stmt->bindValue(1,'bee');
$stmt->bindValue(':name','bee');
$res = $stmt->execute();
var_dump($res);

預(yù)編譯能更好地防止sql注入,是因?yàn)轭A(yù)編譯時(shí)候不需要用戶的數(shù)據(jù)參與,因此編譯時(shí)結(jié)構(gòu)固定,所以數(shù)據(jù)不影響到sql結(jié)構(gòu)。

$pdo->query()與$pdo->execute()如果需要防止sql注入,可以使用$pdo->quote()(其作用是先轉(zhuǎn)義后加引號(hào))

PDOstatement常用方法:

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

pdo應(yīng)用

<?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 '失敗的語(yǔ)句'.$sql.'<br>';
    echo '錯(cuò)誤代碼'.$erro[1].'<br>';
    echo '錯(cuò)誤信息'.$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));
?>

運(yùn)行效果圖如下:

更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP基于pdo操作數(shù)據(jù)庫(kù)技巧總結(jié)》、《php+Oracle數(shù)據(jù)庫(kù)程序設(shè)計(jì)技巧總結(jié)》、《PHP+MongoDB數(shù)據(jù)庫(kù)操作技巧大全》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫(kù)操作入門教程》及《php常見數(shù)據(jù)庫(kù)操作技巧匯總

希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • 關(guān)于Laravel Service Provider開發(fā)設(shè)置延遲加載時(shí)遇到的問(wèn)題詳解

    關(guān)于Laravel Service Provider開發(fā)設(shè)置延遲加載時(shí)遇到的問(wèn)題詳解

    這篇文章主要給大家介紹了關(guān)于Laravel Service Provider開發(fā)設(shè)置延遲加載時(shí)遇到的問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起看看吧。
    2018-01-01
  • phpstudy?apache開啟ssi使用詳解

    phpstudy?apache開啟ssi使用詳解

    SSI具有強(qiáng)大的功能,只要使用一條簡(jiǎn)單的SSI?命令就可以實(shí)現(xiàn)整個(gè)網(wǎng)站的內(nèi)容更新,時(shí)間和日期的動(dòng)態(tài)顯示,以及執(zhí)行shell和CGI腳本程序等復(fù)雜的功能。在Apache服務(wù)器下,可以通過(guò)直接編輯服務(wù)器配置文件或者在需要使用SSI的目錄中創(chuàng)建.htaccess文件來(lái)啟動(dòng)SSI。
    2022-12-12
  • php從數(shù)組中隨機(jī)抽取一些元素的代碼

    php從數(shù)組中隨機(jī)抽取一些元素的代碼

    php從數(shù)組中隨機(jī)抽取一些元素的代碼,需要的朋友可以參考下
    2012-11-11
  • PHP加密函數(shù) Javascript/Js 解密函數(shù)

    PHP加密函數(shù) Javascript/Js 解密函數(shù)

    php加密,js解密,貌似沒什么意義,主要是key在js中會(huì)被看到,不過(guò)在某些地方可能會(huì)用到
    2013-09-09
  • PHP操作文件方法問(wèn)答

    PHP操作文件方法問(wèn)答

    PHP操作文件方法問(wèn)答...
    2007-03-03
  • 作為PHP程序員你要知道的另外一種日志

    作為PHP程序員你要知道的另外一種日志

    這篇文章主要給大家介紹了關(guān)于作為PHP程序員要知道的另外一種日志的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起看看吧
    2018-07-07
  • 通俗易懂的php防注入代碼

    通俗易懂的php防注入代碼

    一直搞.net ,最近研究PHP,也涉及到防注入的安全措施,和.net的大同小異,從網(wǎng)上摘回一篇,作為備注,以供自己需要時(shí)查閱。
    2010-04-04
  • php中通用的excel導(dǎo)出方法實(shí)例

    php中通用的excel導(dǎo)出方法實(shí)例

    這篇文章主要給大家介紹了關(guān)于php中通用的excel導(dǎo)出方法的相關(guān)資料,通過(guò)文中介紹的方法對(duì)大家學(xué)習(xí)或者使用php具有一定的參考學(xué)學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • PHP根據(jù)樹的前序遍歷和中序遍歷構(gòu)造樹并輸出后序遍歷的方法

    PHP根據(jù)樹的前序遍歷和中序遍歷構(gòu)造樹并輸出后序遍歷的方法

    這篇文章主要介紹了PHP根據(jù)樹的前序遍歷和中序遍歷構(gòu)造樹并輸出后序遍歷的方法,涉及php數(shù)據(jù)結(jié)構(gòu)與算法中關(guān)于數(shù)的遍歷相關(guān)操作技巧,需要的朋友可以參考下
    2017-11-11
  • PHP Header用于頁(yè)面跳轉(zhuǎn)要注意的幾個(gè)問(wèn)題總結(jié)

    PHP Header用于頁(yè)面跳轉(zhuǎn)要注意的幾個(gè)問(wèn)題總結(jié)

    在PHP中用header("location:test.php")進(jìn)行跳轉(zhuǎn)要注意以下幾點(diǎn),有助于解決一些新手經(jīng)常遇到的問(wèn)題
    2008-10-10

最新評(píng)論