PDO概念及總結

PDO概念及總結

爲什麼要講PDO:
(1)市面上使用最多的,大部分企業使用PDO

(2)Mysqli  只支持MySQL數據庫,PDO支持大部分數據庫

(3)以後做的項目都是使用PDO作爲數據庫抽象層來實現的

mysqli------是mysql數據庫的加強:

(預處理機制)

(錯誤處理機制)

(採用了面向對象的編程模式)

一、PHP如何操作數據庫

與具體數據庫的擴展:php想操作那個數據庫,需要開啓這個數據庫的擴展,提供操作這個數據庫的函數

二、什麼是PDO

PDO是一個mysql官方封裝的,基於面向對象編程思想的,使用c語言開發的數據庫抽象層

三、PDO數據庫抽象的概念:

PDO抽象類

它是封裝的一個類,就是一個控制數據庫的新的操作方法

將具體的操作數據庫的代碼封裝到數據庫抽象層,如果出項數據庫轉移,只需在php代碼裏高速數據庫抽象層,你去使用哪一個數據庫就可以了

通過代碼引出PDO

<?php

  //寫一個函數,根據傳遞的參數來操作不同的數據庫

  function mysql_db($type){

    if($type=='mysql'){

        mysql_connect();

        mysql_select_db();

    }elseif ($type=='mssql'){

        mssql_connect();

        mssql_query();

    }elseif ($type=='oracle'){

        // 具體操作某個數據庫的函數

    }

  }

  mysql_db('mysql');

  function mysql_q($type,$sql){

    if($type=='mysql'){

        mysql_query($sql);

    }

  }

?>

一、     如何使用PDO

和當前使用mysql非常像

要想使用mysql需要開啓mysql擴展,

需想使用PDO,需要開啓PDO擴展

獲得PDO對象,調用方法

(1)要開啓pdo驅動

Extension = php_pdo.dll

Extension = php_pdo_sqlite.dll

Extension = php_pdo_mysql.dll

開啓這個擴展(驅動),就可以使用這個擴展給我們提供類了

2)使用這個類,實例化這個類,調用屬性和方法

    <?php

   //使用PDO操作數據庫

   //第一個參數:連接數據庫的類型:主機名;數據庫名

   $dsc 'mysql:host=localhost;dbname=mysql_text';

   $user 'root';

   $pass '123';

   $pdo new PDO($dsc,$user,$pass);//實例化一個類的時候,會自動的先調用__construct()構造函數

   //var_dump($pdo);

  

   //執行sql語句獲得

   $sql 'select*fromgoods';

   $result $pdo->query($sql);//query方法返回的是PDOStatement對象

   //如果想獲得具體的數據,需要調用對象的方法:fetchAll();參數是類常量,表示返回什麼樣的數據

   $rows $result->fetchAll(PDO::FETCH_BOTH);

   //var_dump($rows);

  

   //更新數據庫的操作

   $sql 'update goods set goods_name="lalala" wheregoods_id=3';

   //執行增刪改的語句,exec()方法,執行查詢的語句 query()

   //exec()返回受影響的函數      query()返回PDOStatement對象

   $nums $pdo->exec($sql);

   var_dump($nums);

  

   ?>

二、     PDO預編譯機制

先將sql語句的數據部分和費數據部分分離開————》將不帶數據的部分預編譯一下prepare()————》在編譯結果上綁定數據bandparam()————》執行編譯結果execute()

預編譯的好處:1、減少了編譯的字符數,編譯的速度提高

              2、如果再次執行同樣的sql語句,直接綁定數據,減少編譯sql語句時間

寫代碼實現PDO的預編譯(與處理機制)

<?php

    //預編譯:PDO::prepare($sql);   返回PDOStatement對象

    //綁定數據PDOStamentt->bindParam();  給預編譯的結果綁定數據

    //執行編譯結果 PDOStament->execute();

   

    //使用PDO操作數據庫

    //第一個參數:連接數據庫的類型:主機名;數據庫名

    $dsn  'mysql:host=localhost;dbname=mysql_text';

    $user 'root';

    $pass '123';

    $pdo new PDO($dsn,$user,$pass);

   //var_dump($pdo);

  

   

    //預編譯prepare();參數是不帶數據的sql語句

    //先將sql語句中的數據部分用佔位符代替 :佔位符名稱

    $sql 'insert intogoods values(null,:name,:price,:number)';

    $smt $pdo->prepare($sql);  //返回一個PDOStament 對象

    //綁定數據 PDOStament對象的bindParam()來綁定參數:佔位符,實際數據

    $goods_name'surface';

    $goods_price'3500';

    $goods_num'41';

    $smt->bindParam(':name',$goods_name);

    $smt->bindParam(':price',$goods_price);

    $smt->bindParam(':number',$goods_num);

    $smt->execute()

?>

三、     PDO的錯誤處理機制:

1)靜默模式

  默認情況下與mysql處理方式一致,不現實錯誤信息(靜默模式)但是我們可以通過固定的方法獲得錯誤信息

2)警告模式

    //更改屬性設置錯誤處理模式

    $pdo ->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);

3)異常模式,當發生錯誤時,拋出一個異常

   $pdo ->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

   $sql 'select*fromgood';

   try {

   //嘗試可能會處錯誤的代碼

   $pdo ->query($sql);

   }catch (PDOException $e){

   //現在捕獲異常後,自己看着辦,是讓他顯示出來呢,還是輸出到日誌文件裏呢?

    //通常是將錯誤信息輸出到日誌文件裏

   var_dump($e->getMessage());

   file_put_contents('D://mysql.log',$e->getMessage());

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章