pdo的用處,用法

光、夜雨微涼發表於2018-05-15

PDO主要是用來對資料庫進行訪問的。PDO擴充套件為PHP訪問資料庫定義了一個輕量級的一致介面,不同資料庫在訪問時,採用相同方法名稱,解決了連線資料庫不統一問題。PDO擴充套件自身並不能實現任何資料庫功能,必須使用一個具體資料庫的PDO驅動來訪問資料庫服務。

 pdo特點: 效能:比傳統和原生訪問資料庫方式的效率高。

  執行時擴充套件:pdo是模組化的。能在專案執行時載入資料庫的驅動。

 pdo的安裝問題:

 找到擴充套件配置位置,新增extension=php_pdo_mysql.dll。 如果程式碼存在,則把前面的分號註釋去掉即可。extension=php_pdo.dll同理

 重啟apache

 pdo的分類:

 PDO類 : 主要使用者資料庫連線,傳送sql語句
 PDOStatement類 : 主要用來解釋結果集,實現預處理,事物處理
 PDOException類 : 主要用於捕獲PDO異常

建立PDO物件:

 變數名 = new PDO('資料庫源','使用者名稱','密碼');

 例如:$db = new PDO('mysql:host=localhost;port=3306;charset=utf8;dbname=stu','root','root');

  exec()方法執行一條 SQL 語句,並返回受影響的行數,建議用於增刪改的SQL執行操作

  query()方法執行一條SQL語句,並返回結果集,建議用於查詢的SQL執行操作

  對應query()方法,可以通過setFetchMode(PDO::FETCH_ASSOC) 設定獲取結果集的返回型別

  setFetchMode方法的一個PDO引數可以有三個值:

  PDO::FETCH_ASSOC 只返回關聯陣列。
  PDO::FETCH_NUM  只返回數字下標陣列。
  PDO::FETCH_BOTH  預設的,關聯陣列+數字下標的陣列。

  fetch()方法從結果集中獲取下一行 ,一次只能返回一行資料,獲取不到資料返回false,通過引數可以設定結果集的返回型別

  引數一共有以下幾個:

  • PDO::FETCH_ASSOC:返回一個索引為結果集列名的陣列

  • PDO::FETCH_BOTH(預設):返回一個索引為結果集列名和以0開始的列號的陣列

  • PDO::FETCH_BOUND:返回 TRUE ,並分配結果集中的列值給 PDOStatement::bindColumn() 方法繫結的 PHP 變數。

  • PDO::FETCH_CLASS:返回一個請求類的新例項,對映結果集中的列名到類中對應的屬性名。

  • PDO::FETCH_INTO:更新一個被請求類已存在的例項,對映結果集中的列到類中命名的屬性

  • PDO::FETCH_LAZY:結合使用 PDO::FETCH_BOTHPDO::FETCH_OBJ,建立供用來訪問的物件變數名

  • PDO::FETCH_NUM:返回一個索引為以0開始的結果集列號的陣列

  • PDO::FETCH_OBJ:返回一個屬性名對應結果集列名的匿名物件

  fetchAll()方法返回一個包含結果集中所有行的陣列 ,通過引數可以設定結果集的返回型別。想要獲取結果集中單獨一列的唯一值,需要將    PDO::FETCH_COLUMNPDO::FETCH_UNIQUE 按位或。想要返回一個根據指定列把值分組後的關聯陣列,需要將 PDO::FETCH_COLUMN 和   PDO::FETCH_GROUP 按位或。

通過引數可以設定結果集的返回型別:

  • PDO::FETCH_COLUMN:返回指定以0開始索引的列。

  • PDO::FETCH_CLASS:返回指定類的例項,對映每行的列到類中對應的屬性名。

  • PDO::FETCH_FUNC:將每行的列作為引數傳遞給指定的函式,並返回撥用函式後的結果。

  rowCount()方法 返回受上一個 SQL 語句影響的行數

  prepare()方法生成一個PDOStatement物件,查詢不會立即執行,而是預處理

  例如: $stmt = $db->prepare("select * from test");

  execute()方法執行一條預處理語句

PDO的預處理:

預處理功能就是在SQL語句結構與形式相同的情況下,只有引數不同所採用的一種資料處理機制,其極大的減少了頻寬的浪費。

引數繫結:

bindParam  =>   繫結一個引數到指定的變數名。繫結一個PHP變數到用作預處理的SQL語句中的對應命名佔位符或問號佔位符。這個方法只能繫結變數。

bindValue   =>  把一個值繫結到一個引數 。繫結一個值到用作預處理的 SQL 語句中的對應命名佔位符或問號佔位符。

特別注意:引數識別符號。對於使用命名佔位符的預處理語句,應是類似 :name 形式的引數名。對於使用問號佔位符(?)的預處理語句,應是以1開始索引的引數位置。


PDO中的事務處理功能:
① 開啟事務
  PDO::beginTransaction
② 提交事務
  PDO::commit
③ 回滾事務
  PDO::rollBack

PDO異常處理

異常處理用於在指定的錯誤(異常)情況發生時改變指令碼的正常流程。這種情況稱為異常。

PDO異常捕獲:

try{

$db = new PDO(“mysql:host=localhost;dbname=test”,”root”,”root”);

}catch(PDOException $e){ //捕獲得錯誤。

echo $e->getMessage(); //錯誤資訊

}

PDO屬性的獲取與設定:
setAttribute   =>   設定資料庫控制程式碼屬性。

getAttribute  =>    獲取資料庫連線的屬性值

一些可用的通用屬性:

  • PDO::ATTR_CASE:強制列名為指定的大小寫。

    • PDO::CASE_LOWER:強制列名小寫。

    • PDO::CASE_NATURAL:保留資料庫驅動返回的列名。

    • PDO::CASE_UPPER:強制列名大寫。

  • PDO::ATTR_ERRMODE:錯誤報告。

    • PDO::ERRMODE_SILENT: 僅設定錯誤程式碼。

    • PDO::ERRMODE_WARNING: 引發 E_WARNING 錯誤

    • PDO::ERRMODE_EXCEPTION: 丟擲 exceptions 異常。

  • PDO::ATTR_ORACLE_NULLS (在所有驅動中都可用,不僅限於Oracle): 轉換 NULL 和空字串。

    • PDO::NULL_NATURAL: 不轉換。

    • PDO::NULL_EMPTY_STRING: 將空字串轉換成 NULL

    • PDO::NULL_TO_STRING: 將 NULL 轉換成空字串。

  • PDO::ATTR_STRINGIFY_FETCHES: 提取的時候將數值轉換為字串。

  • PDO::ATTR_STATEMENT_CLASS: 設定從PDOStatement派生的使用者提供的語句類。 不能用於持久的PDO例項。

  • PDO::ATTR_TIMEOUT: 指定超時的秒數。並非所有驅動都支援此選項,這意味著驅動和驅動之間可能會有差異。比如,SQLite等待的時間達到此值後就放棄獲取可寫鎖,但其他驅動可能會將此值解釋為一個連線或讀取超時的間隔。 需要 int 型別。

  • PDO::ATTR_AUTOCOMMIT (在OCI,Firebird 以及 MySQL中可用): 是否自動提交每個單獨的語句。

  • PDO::ATTR_EMULATE_PREPARES 啟用或禁用預處理語句的模擬。 有些驅動不支援或有限度地支援本地預處理。使用此設定強制PDO總是模擬預處理語句(如果為 TRUE ),或試著使用本地預處理語句(如果為 FALSE)。如果驅動不能成功預處理當前查詢,它將總是回到模擬預處理語句上。 需要 bool 型別。

  • PDO::MYSQL_ATTR_USE_BUFFERED_QUERY (在MySQL中可用): 使用緩衝查詢。

  • PDO::ATTR_DEFAULT_FETCH_MODE: 設定預設的提取模式。

 

 

相關文章