天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

PHP PDO函數(shù)庫詳解

目前而言,實(shí)現(xiàn)“數(shù)據(jù)庫抽象層”任重而道遠(yuǎn),使用PDO這樣的“數(shù)據(jù)庫訪問抽象層”是一個(gè)不錯(cuò)的選擇。

PDO中包含三個(gè)預(yù)定義的類

PDO中包含三個(gè)預(yù)定義的類,它們分別是 PDO、PDOStatement 和 PDOException。

一、PDO

PDO->beginTransaction() ― 標(biāo)明回滾起始點(diǎn)
PDO->commit() ― 標(biāo)明回滾結(jié)束點(diǎn),并執(zhí)行SQL
PDO->__construct() ― 建立一個(gè)PDO鏈接數(shù)據(jù)庫的實(shí)例
PDO->errorCode() ― 獲取錯(cuò)誤碼
PDO->errorInfo() ― 獲取錯(cuò)誤的信息
PDO->exec() ― 處理一條SQL語句,并返回所影響的條目數(shù)
PDO->getAttribute() ― 獲取一個(gè)“數(shù)據(jù)庫連接對(duì)象”的屬性
PDO->getAvailableDrivers() ― 獲取有效的PDO驅(qū)動(dòng)器名稱
PDO->lastInsertId() ― 獲取寫入的最后一條數(shù)據(jù)的主鍵值
PDO->prepare() ― 生成一個(gè)“查詢對(duì)象”
PDO->query() ― 處理一條SQL語句,并返回一個(gè)“PDOStatement”
PDO->quote() ― 為某個(gè)SQL中的字符串添加引號(hào)
PDO->rollBack() ― 執(zhí)行回滾
PDO->setAttribute() ― 為一個(gè)“數(shù)據(jù)庫連接對(duì)象”設(shè)定屬性

二、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是一個(gè)“數(shù)據(jù)庫訪問抽象層”,作用是統(tǒng)一各種數(shù)據(jù)庫的訪問接口,與mysql和mysqli的函數(shù)庫相比,PDO讓跨數(shù)據(jù)庫的使用更具有親和力;與ADODB和MDB2相比,PDO更高效。目前而言,實(shí)現(xiàn)“數(shù)據(jù)庫抽象層”任重而道遠(yuǎn),使用PDO這樣的“數(shù)據(jù)庫訪問抽象層”是一個(gè)不錯(cuò)的選擇。

PDO中包含三個(gè)預(yù)定義的類

PDO中包含三個(gè)預(yù)定義的類,它們分別是 PDO、PDOStatement 和 PDOException。

一、PDO

PDO->beginTransaction() ― 標(biāo)明回滾起始點(diǎn)
PDO->commit() ― 標(biāo)明回滾結(jié)束點(diǎn),并執(zhí)行SQL
PDO->rollBack() ― 執(zhí)行回滾
PDO->__construct() ― 建立一個(gè)PDO鏈接數(shù)據(jù)庫的實(shí)例
PDO->errorCode() ― 獲取錯(cuò)誤碼
PDO->errorInfo() ― 獲取錯(cuò)誤的信息
PDO->exec() ― 處理一條SQL語句,并返回所影響的條目數(shù)
PDO->getAttribute() ― 獲取一個(gè)“數(shù)據(jù)庫連接對(duì)象”的屬性
PDO->getAvailableDrivers() ― 獲取有效的PDO驅(qū)動(dòng)器名稱
PDO->lastInsertId() ― 獲取寫入的最后一條數(shù)據(jù)的主鍵值
PDO->prepare() ― 生成一個(gè)“查詢對(duì)象”
PDO->query() ― 處理一條SQL語句,并返回一個(gè)“PDOStatement”
PDO->quote() ― 為某個(gè)SQL中的字符串添加引號(hào)
PDO->setAttribute() ― 為一個(gè)“數(shù)據(jù)庫連接對(duì)象”設(shè)定屬性

詳解1) PDO中的數(shù)據(jù)庫連接
$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應(yīng)用會(huì)因?yàn)槭褂昧讼驍?shù)據(jù)庫的持久連接而得到優(yōu)化。持久連接不會(huì)在腳本結(jié)束時(shí)關(guān)閉,
相反它會(huì)被緩存起來并在另一個(gè)腳本通過同樣的標(biāo)識(shí)請(qǐng)求一個(gè)連接時(shí)得以重新利用。
持久連接的緩存可以使你避免在腳本每次需要與數(shù)據(jù)庫對(duì)話時(shí)都要部署一個(gè)新的連接的資源消耗,讓你的Web應(yīng)用更加快速。
上面實(shí)例中的array(PDO::ATTR_PERSISTENT => true)就是把連接類型設(shè)置為持久連接。

詳解2) PDO中的事務(wù)
PDO->beginTransaction(),PDO->commit(),PDO->rollBack()這三個(gè)方法是在支持回滾功能時(shí)一起使用的。PDO->beginTransaction()方法標(biāo)明起始點(diǎn),PDO->commit()方法標(biāo)明回滾結(jié)束點(diǎn),并執(zhí)行SQL,PDO->rollBack()執(zhí)行回滾。
<?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();
}
?>
現(xiàn)在你已經(jīng)通過PDO建立了連接,在部署查詢之前你必須搞明白PDO是怎樣管理事務(wù)的。如果你以前從未遇到過事務(wù)處理,(現(xiàn)在簡單介紹一下:)它們提供了4個(gè)主要的特性:原子性,一致性,獨(dú)立性和持久性(Atomicity, Consistency, Isolation and Durability,ACID)通俗一點(diǎn)講,一個(gè)事務(wù)中所有的工作在提交時(shí),即使它是分階段執(zhí)行的,也要保證安全地應(yīng)用于數(shù)據(jù)庫,不被其他的連接干擾。事務(wù)工作也可以在請(qǐng)求發(fā)生錯(cuò)誤時(shí)輕松地自動(dòng)取消。

事務(wù)的典型運(yùn)用就是通過把批量的改變“保存起來”然后立即執(zhí)行。這樣就會(huì)有徹底地提高更新效率的好處。換句話說,事務(wù)可以使你的腳本更快速同時(shí)可能更健壯(要實(shí)現(xiàn)這個(gè)優(yōu)點(diǎn)你仍然需要正確的使用它們)。

不幸運(yùn)的是,并不是每個(gè)數(shù)據(jù)庫都支持事務(wù),因此PDO需要在建立連接時(shí)運(yùn)行在被認(rèn)為是“自動(dòng)提交”的模式下。自動(dòng)提交模式意味著你執(zhí)行的每個(gè)查詢都有它自己隱含的事務(wù)處理,無論數(shù)據(jù)庫支持事務(wù)還是因數(shù)據(jù)庫不支持而不存在事務(wù)。如果你需要一個(gè)事務(wù),你必須使用 PDO->beginTransaction() 方法創(chuàng)建一個(gè)。如果底層驅(qū)動(dòng)不支持事務(wù)處理,一個(gè)PDOException就會(huì)被拋出(與你的異常處理設(shè)置無關(guān),因?yàn)檫@總是一個(gè)嚴(yán)重的錯(cuò)誤狀態(tài))。在一個(gè)事物中,你可以使用 PDO->commit() 或 PDO->rollBack() 結(jié)束它,這取決于事務(wù)中代碼運(yùn)行是否成功。

當(dāng)腳本結(jié)束時(shí)或一個(gè)連接要關(guān)閉時(shí),如果你還有一個(gè)未處理完的事務(wù),PDO將會(huì)自動(dòng)將其回滾。這是對(duì)于腳本意外終止的情況來說是一個(gè)安全的方案――如果你沒有明確地提交事務(wù),它將會(huì)假設(shè)發(fā)生了一些錯(cuò)誤,為了你數(shù)據(jù)的安全,所以就執(zhí)行回滾了。

二、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

三、PDOException

PDO 提供了3中不同的錯(cuò)誤處理策略。
1. PDO::ERRMODE_SILENT
這是默認(rèn)使用的模式。PDO會(huì)在statement和database對(duì)象上設(shè)定簡單的錯(cuò)誤代號(hào),你可以使用PDO->errorCode() 和 PDO->errorInfo() 方法檢查錯(cuò)誤;如果錯(cuò)誤是在對(duì)statement對(duì)象進(jìn)行調(diào)用時(shí)導(dǎo)致的,你就可以在那個(gè)對(duì)象上使用 PDOStatement->errorCode() 或 PDOStatement->errorInfo() 方法取得錯(cuò)誤信息。而如果錯(cuò)誤是在對(duì)database對(duì)象調(diào)用時(shí)導(dǎo)致的,你就應(yīng)該在這個(gè)database對(duì)象上調(diào)用那兩個(gè)方法。
2. PDO::ERRMODE_WARNING
作為設(shè)置錯(cuò)誤代號(hào)的附加,PDO將會(huì)發(fā)出一個(gè)傳統(tǒng)的E_WARNING信息。這種設(shè)置在除錯(cuò)和調(diào)試時(shí)是很有用的,如果你只是想看看發(fā)生了什么問題而不想中斷程序的流程的話。
3. PDO::ERRMODE_EXCEPTION
作為設(shè)置錯(cuò)誤代號(hào)的附件,PDO會(huì)拋出一個(gè)PDOException異常并設(shè)置它的屬性來反映錯(cuò)誤代號(hào)和錯(cuò)誤信息。這中設(shè)置在除錯(cuò)時(shí)也是很有用的,因?yàn)樗麜?huì)有效的“放大(blow up)”腳本中的出錯(cuò)點(diǎn),非常快速的指向一個(gè)你代碼中可能出錯(cuò)區(qū)域。(記住:如果異常導(dǎo)致腳本中斷,事務(wù)處理回自動(dòng)回滾。)
異常模式也是非常有用的,因?yàn)槟憧梢允褂帽纫郧澳欠N使用傳統(tǒng)的php風(fēng)格的錯(cuò)誤處理結(jié)構(gòu)更清晰的結(jié)構(gòu)處理錯(cuò)誤,比使用安靜模式使用更少的代碼及嵌套,也能夠更加明確地檢查每個(gè)數(shù)據(jù)庫訪問的返回值。
關(guān)于php中異常的更多信息請(qǐng)看Exceptions章節(jié)
PDO 使用基于SQL-92 SQLSTATE 的錯(cuò)誤代號(hào)字符串;特定的PDO驅(qū)動(dòng)應(yīng)當(dāng)將自己本身的代號(hào)對(duì)應(yīng)到適當(dāng)?shù)腟QLSTATE代號(hào)上。PDO->errorCode() 方法只返回單一的SQLSTATE代號(hào)。如果你需要關(guān)于一個(gè)錯(cuò)誤的更加有針對(duì)性的信息,PDO也提供了一個(gè)PDO->errorInfo()方法,它可以返回一個(gè)包含了SQLSTATE代號(hào),特定數(shù)據(jù)庫驅(qū)動(dòng)的錯(cuò)誤代號(hào)和特定數(shù)據(jù)庫驅(qū)動(dòng)的錯(cuò)誤說明字符串。

<?php
// 修改默認(rèn)的錯(cuò)誤顯示級(jí)別
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
?>

屬性列表:

PDO::PARAM_BOOL
表示一個(gè)布爾類型
PDO::PARAM_NULL
表示一個(gè)
SQL中的NULL類型
PDO::PARAM_INT
表示一個(gè)
SQL中的INTEGER類型
PDO::PARAM_STR
表示一個(gè)
SQL中的SQL CHARVARCHAR類型
PDO::PARAM_LOB
表示一個(gè)
SQL中的large object類型
PDO::PARAM_STMT
表示一個(gè)
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
將每一行結(jié)果作為一個(gè)對(duì)象返回
PDO::FETCH_ASSOC
僅僅返回以鍵值作為下標(biāo)的查詢的結(jié)果集,名稱相同的數(shù)據(jù)只返回一個(gè)
PDO::FETCH_NAMED
僅僅返回以鍵值作為下標(biāo)的查詢的結(jié)果集,名稱相同的數(shù)據(jù)以數(shù)組形式返回
PDO::FETCH_NUM
僅僅返回以數(shù)字作為下標(biāo)的查詢的結(jié)果集
PDO::FETCH_BOTH
同時(shí)返回以鍵值和數(shù)字作為下標(biāo)的查詢的結(jié)果集
PDO::FETCH_OBJ
以對(duì)象的形式返回結(jié)果集
PDO::FETCH_BOUND
PDOStatement::bindParam()PDOStatement::bindColumn()所綁定的值作為變量名賦值后返回
PDO::FETCH_COLUMN
表示僅僅返回結(jié)果集中的某一列
PDO::FETCH_CLASS
表示以類的形式返回結(jié)果集
PDO::FETCH_INTO
表示將數(shù)據(jù)合并入一個(gè)存在的類中進(jìn)行返回
PDO::FETCH_FUNC
PDO::FETCH_GROUP
PDO::FETCH_UNIQUE
PDO::FETCH_KEY_PAIR
以首個(gè)鍵值下表,后面數(shù)字下表的形式返回結(jié)果集
PDO::FETCH_CLASSTYPE
PDO::FETCH_SERIALIZE
表示將數(shù)據(jù)合并入一個(gè)存在的類中并序列化返回
PDO::FETCH_PROPS_LATE
Available since php 5.2.0
PDO::ATTR_AUTOCOMMIT
在設(shè)置成
true的時(shí)候,PDO會(huì)自動(dòng)嘗試停止接受委托,開始執(zhí)行
PDO::ATTR_PREFETCH
設(shè)置應(yīng)用程序提前獲取的數(shù)據(jù)大小,并非所有的數(shù)據(jù)庫哦度支持
PDO::ATTR_TIMEOUT
設(shè)置連接數(shù)據(jù)庫超時(shí)的值
PDO::ATTR_ERRMODE
設(shè)置
Error處理的模式
PDO::ATTR_SERVER_VERSION
只讀屬性,表示
PDO連接的服務(wù)器端數(shù)據(jù)庫版本
PDO::ATTR_CLIENT_VERSION
只讀屬性,表示
PDO連接的客戶端PDO驅(qū)動(dòng)版本
PDO::ATTR_SERVER_INFO
只讀屬性,表示
PDO連接的服務(wù)器meta信息
PDO::ATTR_CONNECTION_STATUS
PDO::ATTR_CASE
通過
PDO::CASE_*中的內(nèi)容對(duì)列的形式進(jìn)行操作
PDO::ATTR_CURSOR_NAME
獲取或者設(shè)定指針的名稱
PDO::ATTR_CURSOR
設(shè)置指針的類型,
PDO現(xiàn)在支持PDO::CURSOR_FWDONLYPDO::CURSOR_FWDONLY
PDO::ATTR_DRIVER_NAME
返回使用的
PDO驅(qū)動(dòng)的名稱
PDO::ATTR_ORACLE_NULLS
將返回的空字符串轉(zhuǎn)換為
SQLNULL
PDO::ATTR_PERSISTENT
獲取一個(gè)存在的連接
PDO::ATTR_STATEMENT_CLASS
PDO::ATTR_FETCH_CATALOG_NAMES
在返回的結(jié)果集中,使用自定義目錄名稱來代替字段名。
PDO::ATTR_FETCH_TABLE_NAMES
在返回的結(jié)果集中,使用自定義表格名稱來代替字段名。
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
發(fā)生錯(cuò)誤時(shí)不匯報(bào)任何的錯(cuò)誤信息,是默認(rèn)值
PDO::ERRMODE_WARNING
發(fā)生錯(cuò)誤時(shí)發(fā)出一條
phpE_WARNING的信息
PDO::ERRMODE_EXCEPTION
發(fā)生錯(cuò)誤時(shí)拋出一個(gè)
PDOException
PDO::CASE_NATURAL
回復(fù)列的默認(rèn)顯示格式
PDO::CASE_LOWER
強(qiáng)制列的名字小寫
PDO::CASE_UPPER
強(qiáng)制列的名字大寫
PDO::NULL_NATURAL
PDO::NULL_EMPTY_STRING
PDO::NULL_TO_STRING
PDO::FETCH_ORI_NEXT
獲取結(jié)果集中的下一行數(shù)據(jù),僅在有指針功能時(shí)有效
PDO::FETCH_ORI_PRIOR
獲取結(jié)果集中的上一行數(shù)據(jù),僅在有指針功能時(shí)有效
PDO::FETCH_ORI_FIRST
獲取結(jié)果集中的第一行數(shù)據(jù),僅在有指針功能時(shí)有效
PDO::FETCH_ORI_LAST
獲取結(jié)果集中的最后一行數(shù)據(jù),僅在有指針功能時(shí)有效
PDO::FETCH_ORI_ABS
獲取結(jié)果集中的某一行數(shù)據(jù),僅在有指針功能時(shí)有效
PDO::FETCH_ORI_REL
獲取結(jié)果集中當(dāng)前行后某行的數(shù)據(jù),僅在有指針功能時(shí)有效
PDO::CURSOR_FWDONLY
建立一個(gè)只能向后的指針操作對(duì)象
PDO::CURSOR_SCROLL
建立一個(gè)指針操作對(duì)象,傳遞
PDO::FETCH_ORI_*中的內(nèi)容來控制結(jié)果集
PDO::ERR_NONE (string)
設(shè)定沒有錯(cuò)誤時(shí)候的錯(cuò)誤信息
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.

php技術(shù)PHP PDO函數(shù)庫詳解,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 51精品国产AV无码久久久 | 国产精品A8198V久久A片 | 久久久久综合一本久道 | 国产精品嫩草影院在线观看免费 | 高清AV熟女一区 | 久久亚洲高清观看 | 国产 欧美 亚洲 日韩视频 | 久久热r在线视频精品 | 嗯好舒服嗯好大好猛好爽 | 伊人久久大香线蕉综合电影 | 蝴蝶中文娱乐 | 国产精自产拍久久久久久蜜 | 5G年龄确认我已满18免费 | 午夜性爽视频男人的天堂在线 | YY600800新视觉理论私人 | 亚洲精品高清AV在线播放 | 贵妇局长的蕾丝乳罩 | 体内精69xxxxxx喷潮 | 超碰免费视频公开观看 | 国产白丝精品爽爽久久蜜臀 | 蜜桃精品成人影片 | 精品视频在线播放 | 热99re久久精品国产首页 | 狠狠躁天天躁小说 | 这里只有精品在线视频 | 夜蒲团之5阳性之教 | 月夜直播免费观看全集 | 久久久久久久网 | 动漫H片在线播放免费高清 动漫AV纯肉无码AV电影网 | 国产精品内射久久久久欢欢 | 暖暖 免费 高清 日本 在线 | 三级叫床震大尺度视频 | 在线播放成人无码日 | 无人区在线日本高清免费 | 国产精品99久久久久久宅男AV | 丰满艳妇亲伦 | 7723手机游戏破解版下载 | 亚洲精品网址 | 国产在线精品一区二区网站免费 | 饥渴难耐的浪荡艳妇在线观看 | 国产成人免费a在线视频app |