PDO是一個「數據庫訪問抽象層」,做用是統一各類數據庫的訪問接口,與mysql和php
mysqli的函數庫相比,PDO讓跨數據庫的使用更具備親和力;與ADODB和MDB2相比mysql
,PDO更高效。 目前而言,實現「數據庫抽象層」任重而道遠,使用PDO這樣的「數據庫訪問抽象層」是sql
一個不錯的選擇。 PDO中包含三個預約義的類 PDO中包含三個預約義的類,它們分別是 PDO、PDOStatement 和 PDOException。 1、PDO PDO->beginTransaction() — 標明回滾起始點 PDO->commit() — 標明回滾結束點,並執行SQL PDO->__construct() — 創建一個PDO連接數據庫的實例 PDO->errorCode() — 獲取錯誤碼 PDO->errorInfo() — 獲取錯誤的信息 PDO->exec() — 處理一條SQL語句,並返回所影響的條目數 PDO->getAttribute() — 獲取一個「數據庫鏈接對象」的屬性 PDO->getAvailableDrivers() — 獲取有效的PDO驅動器名稱 PDO->lastInsertId() — 獲取寫入的最後一條數據的主鍵值 PDO->prepare() — 生成一個「查詢對象」 PDO->query() — 處理一條SQL語句,並返回一個「PDOStatement」 PDO->quote() — 爲某個SQL中的字符串添加引號 PDO->rollBack() — 執行回滾 PDO->setAttribute() — 爲一個「數據庫鏈接對象」設定屬性 2、PDOStatement PDOStatement->bindColumn() — Bind a column to a PHP variable PDOStatement->bindParam() — Binds a parameter to the specified variable name PDOStatement->bindValue() — Binds a value to a parameter PDOStatement->closeCursor() — Closes the cursor, enabling the statement to be數據庫
executed again. PDOStatement->columnCount() — Returns the number of columns in the result set PDOStatement->errorCode() — Fetch the SQLSTATE associated with the last數組
operation on the statement handle PDOStatement->errorInfo() — Fetch extended error information associated with the緩存
last operation on the statement handle PDOStatement->execute() — Executes a prepared statement PDOStatement->fetch() — Fetches the next row from a result set PDOStatement->fetchAll() — Returns an array containing all of the result set rows PDOStatement->fetchColumn() — Returns a single column from the next row of a安全
result set PDOStatement->fetchObject() — Fetches the next row and returns it as an object. PDOStatement->getAttribute() — Retrieve a statement attribute PDOStatement->getColumnMeta() — Returns metadata for a column in a result set PDOStatement->nextRowset() — Advances to the next rowset in a multi-rowset服務器
statement handle PDOStatement->rowCount() — Returns the number of rows affected by the last SQL函數
statement PDOStatement->setAttribute() — Set a statement attribute PDOStatement->setFetchMode() — Set the default fetch mode for this statement PDO是一個「數據庫訪問抽象層」,做用是統一各類數據庫的訪問接口,與mysql和fetch
mysqli的函數庫相比,PDO讓跨數據庫的使用更具備親和力;與ADODB和MDB2相比
,PDO更高效。目前而言,實現「數據庫抽象層」任重而道遠,使用PDO這樣的「數據
庫訪問抽象層」是一個不錯的選擇。 PDO中包含三個預約義的類 PDO中包含三個預約義的類,它們分別是 PDO、PDOStatement 和 PDOException。 1、PDO PDO->beginTransaction() — 標明回滾起始點 PDO->commit() — 標明回滾結束點,並執行SQL PDO->rollBack() — 執行回滾 PDO->__construct() — 創建一個PDO連接數據庫的實例 PDO->errorCode() — 獲取錯誤碼 PDO->errorInfo() — 獲取錯誤的信息 PDO->exec() — 處理一條SQL語句,並返回所影響的條目數 PDO->getAttribute() — 獲取一個「數據庫鏈接對象」的屬性 PDO->getAvailableDrivers() — 獲取有效的PDO驅動器名稱 PDO->lastInsertId() — 獲取寫入的最後一條數據的主鍵值 PDO->prepare() — 生成一個「查詢對象」 PDO->query() — 處理一條SQL語句,並返回一個「PDOStatement」 PDO->quote() — 爲某個SQL中的字符串添加引號 PDO->setAttribute() — 爲一個「數據庫鏈接對象」設定屬性 詳解1) PDO中的數據庫鏈接 $dsn = ‘mysql:dbname=ent;host=127.0.0.1′; $user = ‘root'; $password = ‘123456′; try { $dbh = new PDO($dsn, $user, $password, array(PDO::ATTR_PERSISTENT => true)); $dbh->query('set names utf8;'); foreach ($dbh->query('SELECT * from tpm_juese') as $row) { print_r($row); } } catch (PDOException $e) { echo ‘Connection failed: ‘ . $e->getMessage(); } 許多Web應用會由於使用了向數據庫的持久鏈接而獲得優化。持久鏈接不會在腳本
結束時關閉, 相反它會被緩存起來並在另外一個腳本經過一樣的標識請求一個鏈接時得以從新利用
。 持久鏈接的緩存可使你避免在腳本每次須要與數據庫對話時都要部署一個新的連
接的資源消耗,讓你的Web應用更加快速。 上面實例中的array(PDO::ATTR_PERSISTENT => true)就是把鏈接類型設置爲持久連
接。 詳解2) PDO中的事務 PDO->beginTransaction(),PDO->commit(),PDO->rollBack()這三個方法是在支持回
滾功能時一塊兒使用的。PDO->beginTransaction()方法標明起始點,PDO->commit()方
法標明回滾結束點,並執行SQL,PDO->rollBack()執行回滾。 <?php try { $dbh = new PDO('mysql:host=localhost;dbname=test', ‘root', 」); $dbh->query('set names utf8;'); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $dbh->beginTransaction(); $dbh->exec(」INSERT INTO `test`.`table` (`name` ,`age`)VALUES ('mick', 22);」); $dbh->exec(」INSERT INTO `test`.`table` (`name` ,`age`)VALUES ('lily', 29);」); $dbh->exec(」INSERT INTO `test`.`table` (`name` ,`age`)VALUES ('susan', 21);」); $dbh->commit(); } catch (Exception $e) { $dbh->rollBack(); echo 「Failed: 」 . $e->getMessage(); } ?> 如今你已經經過PDO創建了鏈接,在部署查詢以前你必須搞明白PDO是怎樣管理事
務的。若是你之前從未遇到過事務處理,(如今簡單介紹一下:)它們提供了4個主
要的特性:原子性,一致性,獨立性和持久性(Atomicity, Consistency, Isolation and
Durability,ACID)通俗一點講,一個事務中全部的工做在提交時,即便它是分階段
執行的,也要保證安全地應用於數據庫,不被其餘的鏈接干擾。事務工做也能夠在
請求發生錯誤時輕鬆地自動取消。 事務的典型運用就是經過把批量的改變「保存起來」而後當即執行。這樣就會有完全
地提升更新效率的好處。換句話說,事務可使你的腳本更快速同時可能更健壯(
要實現這個優勢你仍然須要正確的使用它們)。 不幸運的是,並非每一個數據庫都支持事務,所以PDO須要在創建鏈接時運行在被
認爲是「自動提交」的模式下。自動提交模式意味着你執行的每一個查詢都有它本身隱
含的事務處理,不管數據庫支持事務仍是因數據庫不支持而不存在事務。若是你需
要一個事務,你必須使用 PDO->beginTransaction() 方法建立一個。若是底層驅動不
支持事務處理,一個PDOException就會被拋出(與你的異常處理設置無關,由於這
老是一個嚴重的錯誤狀態)。在一個事物中,你可使用 PDO->commit() 或 PDO-
>rollBack() 結束它,這取決於事務中代碼運行是否成功。 當腳本結束時或一個鏈接要關閉時,若是你還有一個未處理完的事務,PDO將會自
動將其回滾。這是對於腳本意外終止的狀況來講是一個安全的方案——若是你沒有
明確地提交事務,它將會假設發生了一些錯誤,爲了你數據的安全,因此就執行回
滾了。 2、PDOStatement PDOStatement->bindColumn() — Bind a column to a PHP variable PDOStatement->bindParam() — Binds a parameter to the specified variable name PDOStatement->bindValue() — Binds a value to a parameter PDOStatement->closeCursor() — Closes the cursor, enabling the statement to be
executed again. PDOStatement->columnCount() — Returns the number of columns in the result set PDOStatement->errorCode() — Fetch the SQLSTATE associated with the last
operation on the statement handle PDOStatement->errorInfo() — Fetch extended error information associated with the
last operation on the statement handle PDOStatement->execute() — Executes a prepared statement PDOStatement->fetch() — Fetches the next row from a result set PDOStatement->fetchAll() — Returns an array containing all of the result set rows PDOStatement->fetchColumn() — Returns a single column from the next row of a
result set PDOStatement->fetchObject() — Fetches the next row and returns it as an object. PDOStatement->getAttribute() — Retrieve a statement attribute PDOStatement->getColumnMeta() — Returns metadata for a column in a result set PDOStatement->nextRowset() — Advances to the next rowset in a multi-rowset
statement handle PDOStatement->rowCount() — Returns the number of rows affected by the last SQL
statement PDOStatement->setAttribute() — Set a statement attribute PDOStatement->setFetchMode() — Set the default fetch mode for this statement 3、PDOException PDO 提供了3中不一樣的錯誤處理策略。 1. PDO::ERRMODE_SILENT 這是默認使用的模式。PDO會在statement和database對象上設定簡單的錯誤代號,
你可使用PDO->errorCode() 和 PDO->errorInfo() 方法檢查錯誤;若是錯誤是在對
statement對象進行調用時致使的,你就能夠在那個對象上使用 PDOStatement-
>errorCode() 或 PDOStatement->errorInfo() 方法取得錯誤信息。而若是錯誤是在對
database對象調用時致使的,你就應該在這個database對象上調用那兩個方法。 2. PDO::ERRMODE_WARNING 做爲設置錯誤代號的附加,PDO將會發出一個傳統的E_WARNING信息。這種設置在
除錯和調試時是頗有用的,若是你只是想看看發生了什麼問題而不想中斷程序的流
程的話。 3. PDO::ERRMODE_EXCEPTION 做爲設置錯誤代號的附件,PDO會拋出一個PDOException異常並設置它的屬性來反
映錯誤代號和錯誤信息。這中設置在除錯時也是頗有用的,由於他會有效的「放大(
blow up)」腳本中的出錯點,很是快速的指向一個你代碼中可能出錯區域。(記住
:若是異常致使腳本中斷,事務處理回自動回滾。) 異常模式也是很是有用的,由於你可使用比之前那種使用傳統的PHP風格的錯誤
處理結構更清晰的結構處理錯誤,比使用安靜模式使用更少的代碼及嵌套,也可以
更加明確地檢查每一個數據庫訪問的返回值。 關於PHP中異常的更多信息請看Exceptions章節 PDO 使用基於SQL-92 SQLSTATE 的錯誤代號字符串;特定的PDO驅動應當將本身本
身的代號對應到適當的SQLSTATE代號上。PDO->errorCode() 方法只返回單一的
SQLSTATE代號。若是你須要關於一個錯誤的更加有針對性的信息,PDO也提供了一
個PDO->errorInfo()方法,它能夠返回一個包含了SQLSTATE代號,特定數據庫驅動
的錯誤代號和特定數據庫驅動的錯誤說明字符串。 <?php // 修改默認的錯誤顯示級別 $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); ?>
屬性列表: PDO::PARAM_BOOL 表示一個布爾類型 PDO::PARAM_NULL 表示一個SQL中的NULL類型 PDO::PARAM_INT 表示一個SQL中的INTEGER類型 PDO::PARAM_STR 表示一個SQL中的SQL CHAR,VARCHAR類型 PDO::PARAM_LOB 表示一個SQL中的large object類型 PDO::PARAM_STMT 表示一個SQL中的recordset類型,尚未被支持 PDO::PARAM_INPUT_OUTPUT Specifies that the parameter is an INOUT parameter for a stored procedure. You
must bitwise-OR this value with an explicit PDO::PARAM_* data type. PDO::FETCH_LAZY 將每一行結果做爲一個對象返回 PDO::FETCH_ASSOC 僅僅返回以鍵值做爲下標的查詢的結果集,名稱相同的數據只返回一個 PDO::FETCH_NAMED 僅僅返回以鍵值做爲下標的查詢的結果集,名稱相同的數據以數組形式返回 PDO::FETCH_NUM 僅僅返回以數字做爲下標的查詢的結果集 PDO::FETCH_BOTH 同時返回以鍵值和數字做爲下標的查詢的結果集 PDO::FETCH_OBJ 以對象的形式返回結果集 PDO::FETCH_BOUND 將PDOStatement::bindParam()和PDOStatement::bindColumn()所綁定的值做爲變量
名賦值後返回 PDO::FETCH_COLUMN 表示僅僅返回結果集中的某一列 PDO::FETCH_CLASS 表示以類的形式返回結果集 PDO::FETCH_INTO 表示將數據合併入一個存在的類中進行返回 PDO::FETCH_FUNC PDO::FETCH_GROUP PDO::FETCH_UNIQUE PDO::FETCH_KEY_PAIR 以首個鍵值下表,後面數字下表的形式返回結果集 PDO::FETCH_CLASSTYPE PDO::FETCH_SERIALIZE 表示將數據合併入一個存在的類中並序列化返回 PDO::FETCH_PROPS_LATE Available since PHP 5.2.0 PDO::ATTR_AUTOCOMMIT 在設置成true的時候,PDO會自動嘗試中止接受委託,開始執行 PDO::ATTR_PREFETCH 設置應用程序提早獲取的數據大小,並不是全部的數據庫哦度支持 PDO::ATTR_TIMEOUT 設置鏈接數據庫超時的值 PDO::ATTR_ERRMODE 設置Error處理的模式 PDO::ATTR_SERVER_VERSION 只讀屬性,表示PDO鏈接的服務器端數據庫版本 PDO::ATTR_CLIENT_VERSION 只讀屬性,表示PDO鏈接的客戶端PDO驅動版本 PDO::ATTR_SERVER_INFO 只讀屬性,表示PDO鏈接的服務器的meta信息 PDO::ATTR_CONNECTION_STATUS PDO::ATTR_CASE 經過PDO::CASE_*中的內容對列的形式進行操做 PDO::ATTR_CURSOR_NAME 獲取或者設定指針的名稱 PDO::ATTR_CURSOR 設置指針的類型,PDO如今支持PDO::CURSOR_FWDONLY和PDO::CURSOR_FWDONLY PDO::ATTR_DRIVER_NAME 返回使用的PDO驅動的名稱 PDO::ATTR_ORACLE_NULLS 將返回的空字符串轉換爲SQL的NULL PDO::ATTR_PERSISTENT 獲取一個存在的鏈接 PDO::ATTR_STATEMENT_CLASS PDO::ATTR_FETCH_CATALOG_NAMES 在返回的結果集中,使用自定義目錄名稱來代替字段名。 PDO::ATTR_FETCH_TABLE_NAMES 在返回的結果集中,使用自定義表格名稱來代替字段名。 PDO::ATTR_STRINGIFY_FETCHES PDO::ATTR_MAX_COLUMN_LEN PDO::ATTR_DEFAULT_FETCH_MODE Available since PHP 5.2.0 PDO::ATTR_EMULATE_PREPARES Available since PHP 5.1.3. PDO::ERRMODE_SILENT 發生錯誤時不彙報任何的錯誤信息,是默認值 PDO::ERRMODE_WARNING 發生錯誤時發出一條php的E_WARNING的信息 PDO::ERRMODE_EXCEPTION 發生錯誤時拋出一個PDOException PDO::CASE_NATURAL 回覆列的默認顯示格式 PDO::CASE_LOWER 強制列的名字小寫 PDO::CASE_UPPER 強制列的名字大寫 PDO::NULL_NATURAL PDO::NULL_EMPTY_STRING PDO::NULL_TO_STRING PDO::FETCH_ORI_NEXT 獲取結果集中的下一行數據,僅在有指針功能時有效 PDO::FETCH_ORI_PRIOR 獲取結果集中的上一行數據,僅在有指針功能時有效 PDO::FETCH_ORI_FIRST 獲取結果集中的第一行數據,僅在有指針功能時有效 PDO::FETCH_ORI_LAST 獲取結果集中的最後一行數據,僅在有指針功能時有效 PDO::FETCH_ORI_ABS 獲取結果集中的某一行數據,僅在有指針功能時有效 PDO::FETCH_ORI_REL 獲取結果集中當前行後某行的數據,僅在有指針功能時有效 PDO::CURSOR_FWDONLY 創建一個只能向後的指針操做對象 PDO::CURSOR_SCROLL 創建一個指針操做對象,傳遞PDO::FETCH_ORI_*中的內容來控制結果集 PDO::ERR_NONE (string) 設定沒有錯誤時候的錯誤信息 PDO::PARAM_EVT_ALLOC Allocation event PDO::PARAM_EVT_FREE Deallocation event PDO::PARAM_EVT_EXEC_PRE Event triggered prior to execution of a prepared statement. PDO::PARAM_EVT_EXEC_POST Event triggered subsequent to execution of a prepared statement. PDO::PARAM_EVT_FETCH_PRE Event triggered prior to fetching a result from a resultset. PDO::PARAM_EVT_FETCH_POST Event triggered subsequent to fetching a result from a resultset. PDO::PARAM_EVT_NORMALIZE Event triggered during bound parameter registration allowing the driver to
normalize the parameter name. 來源於腳本之家:http://www.jb51.net/article/23237.htm