【轉】PDO函數屬性詳解

【轉】PDO函數屬性詳解

PDO是一個「數據庫訪問抽象層」,做用是統一各類數據庫的訪問接口,與mysql和mysqli的函數庫相比,PDO讓跨數據庫的使用更具備親和力;與 ADODB和MDB2相比,PDO更高效。目前而言,實現「數據庫抽象層」任重而道遠,使用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() — 爲一個「數據庫鏈接對象」設定屬性
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」表示的是一個數據庫鏈接對象(new PDO產生),「PDOStatement」表示的是一個查詢對象(PDO->query()產生)或者是一個結果集對象(PDO->prepare()產生)。
一個「數據庫鏈接對象」的例子,返回「PDO」:
1 <?php
2 $dbh new PDO('mysql:host=localhost;dbname=test''root''');
3 ?>




一個「查詢對象」的例子,返回「PDOStatement」:
1 <?php
2 $sql "Insert INTO `test`.`table` (`name` ,`age`)VALUES (?, ?);";
3 $stmt $dbh->prepare($sql);
4 ?>




一個「結果集對象」的例子,返回「PDOStatement」:
1 <?php
2 $sql "Select * FROM `table` Where `name` = 'samon'";
3 $stmt $dbh->query($sql);
4 ?>




在test庫裏面生成table表,並寫入一些數據:
01 <?php
02 $dbh new PDO('mysql:host=localhost;dbname=test''root''');
03 $dbh->query('set names utf8;');
04  
05 $sql = "
06 Drop TABLE IF EXISTS `table`;
07 Create TABLE `test`.`table` (
08 `id` INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY,
09 `name` VARCHAR( 255 ) NOT NULL ,
10 `age` VARCHAR( 255 ) NOT NULL
11 ) ENGINE = InnoDB DEFAULT CHARSET=utf8;
12 Insert INTO `test`.`table` (`name` ,`age`)VALUES ('samon''27');
13 Insert INTO `test`.`table` (`name` ,`age`)VALUES ('leo''26');
14 Insert INTO `test`.`table` (`name` ,`age`)VALUES ('ben''28');
15 ";
16 $dbh->query($sql);
17 ?>




PDO->exec()方法的做用是處理一條SQL語句,並返回所影響的條目數。

PDO->query()方法的做用是處理一條SQL語句,並返回一個「PDOStatement」。

PDO->prepare()方法的做用是生成一個「查詢對象」。

PDO->lastInsertId()方法的做用是獲取寫入的最後一條數據的主鍵值。
1 <?php
2 $dbh new PDO('mysql:host=localhost;dbname=test''root''');
3 $dbh->query('set names utf8;');
4  
5 $sql "Insert INTO `test`.`table` (`name` ,`age`)VALUES ('mick', 22);";
6 $dbh->query($sql);
7 $lid $dbh->lastInsertId($sql);
8 print_r($lid); // 顯示主鍵的值
9 ?>



PDO->quote()方法的做用是爲某個SQL中的字符串添加引號。PDO->quote()方法有兩個參數,第一個參數是字符串,第二個參數表示參數的類型。

PDO->getAttribute()方法的做用是獲取一個「數據庫鏈接對象」的屬性。PDO->setAttribute()方法的做用是爲一個「數據庫鏈接對象」設定屬性。
1 <?php
2 // 修改默認的錯誤顯示級別
3 $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
4 ?>




屬性列表:
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.

PDO->getAvailableDrivers()方法的做用是獲取有效的PDO驅動器名稱。

PDO->errorInfo()方法的做用獲取錯誤的信息,PDO->errorCode()方法的做用是獲取錯誤碼。
01 <?php
02 $dbh new PDO('mysql:host=localhost;dbname=test''root''');
03 $dbh->query('set names utf8;');
04 $sql "Insert INTO `test`.`table` (`name` ,`ageeeeee`)VALUES ('mick', 22);";
05 $dbh->query($sql);
06 print_r($dbh->errorInfo());
07 /**
08 * Array
09 * (
10 *     [0] => 42S22
11 *     [1] => 1054
12 *     [2] => Unknown column 'ageeeeee' in 'field list'
13 * )
14 */
15 ?>




PDO->__construct()方法的做用是創建一個PDO連接數據庫的實例。

PDO->beginTransaction(),PDO->commit(),PDO->rollBack() 這三個方法是在支持回滾功能時一塊兒使用的。PDO->beginTransaction()方法標明起始點,PDO->commit()方法標明回滾結束點,並執行SQL,PDO->rollBack()執行回滾。
01 <?php
02 try {
03 $dbh new PDO('mysql:host=localhost;dbname=test''root''');
04 $dbh->query('set names utf8;');
05 $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
06  
07 $dbh->beginTransaction();
08 $dbh->exec("Insert INTO `test`.`table` (`name` ,`age`)VALUES ('mick', 22);");
09 $dbh->exec("Insert INTO `test`.`table` (`name` ,`age`)VALUES ('lily', 29);");
10 $dbh->exec("Insert INTO `test`.`table` (`name` ,`age`)VALUES ('susan', 21);");
11 $dbh->commit();
12  
13 } catch (Exception $e) {
14 $dbh->rollBack();
15 echo "Failed: " $e->getMessage();
16 }
17 ?>
相關文章
相關標籤/搜索