目前而言,實(shí)現(xiàn)「資料庫(kù)抽象層」任重道遠(yuǎn),使用PDO這樣的「資料庫(kù)存取抽象層」是個(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連結(jié)資料庫(kù)的實(shí)例
PDO->errorCode() — 取得錯(cuò)誤碼
PDO->errorInfo() — 取得錯(cuò)誤的資訊
PDO->exec() — 處理一則SQL語(yǔ)句,並傳回所影響的條目數(shù)
PDO->getAttribute( ) — 取得一個(gè)「資料庫(kù)連線物件」的屬性
PDO->getAvailableDrivers() — 取得有效的PDO磁碟機(jī)名稱
PDO->lastInsertId() — 取得寫(xiě)入的最後一條資料的主鍵值
PDO->prepare( ) — 產(chǎn)生一個(gè)「查詢物件」
PDO->query() — 處理一條SQL語(yǔ)句,並傳回一個(gè)「PDOStatement」
PDO->quote() — 為某個(gè)SQL中的字串加上引號(hào)
PDO->rollBack () — 執(zhí)行回滾
PDO->setAttribute() — 為一個(gè)「資料庫(kù)連接物件」設(shè)定屬性
二、PDOStatement
PDOStatement->bindColumn() — Bind a column to a PHP variable
P) =d 即使() — 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 executedgain. () — Returns the number of columns in the result set
PDOStatement->errorCode() — Fetch the SQLSTATE associated with the last operation on the statement handle
PDOStatement->error Info) — Fetch extend on informated information the the statement handle
PDOStatement->execute() — Executes a prepared statement
PDOStatement->fetch() — Fetches the next row from a result set
PDOStatement->fetchAll() — Returns. 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-> Returns it as an object.
PDOStatement-> Reeveb??ute) —Attribute(statePDObment-> statePDOState)
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. affected by the last SQL statement
PDOStatement->setAttribute() — Set a statement attribute
PDOStatement->setFetchMode() — Set the default fetch mode for this statement
PDO->commit() — 標(biāo)示回溯結(jié)束點(diǎn),並執(zhí)行回復(fù)>__construct() — 建立一個(gè)PDO連結(jié)資料庫(kù)的實(shí)例
PDO->errorCode() — 取得錯(cuò)誤碼
PDO->errorInfo() — 取得錯(cuò)誤的資訊
PDO->exec() — 處理一則SQL語(yǔ)句,並傳回一則SQL語(yǔ)句,並傳回一條SQL語(yǔ)句,並傳回一條SQL語(yǔ)句,並傳回一條SQL語(yǔ)句,並傳回一條SQL語(yǔ)句,並傳回一條SQL語(yǔ)句,並傳回一條SQL語(yǔ)句,並傳回一條SQL所影響的條目數(shù)
PDO->getAttribute() — 取得一個(gè)「資料庫(kù)連線物件」的屬性
PDO->getAvailableDrivers() — 取得有效的PDO磁碟機(jī)名稱
PDO->lastInsertId() — 取得寫(xiě)入的最後一條資料的主鍵值
PDO->prepare() — 產(chǎn)生一個(gè)「查詢物件」
PDO->query() — 處理一條SQL語(yǔ)句,並傳回一個(gè)「PDOStatement」
PDO->quote() — 為某個(gè)SQL中的字串新增引號(hào)
PDO->setAttribute() — 為一個(gè)「資料庫(kù)連線物件」設(shè)定屬性
詳解1) PDO中的資料庫(kù)連線
$dsn = 'mysql:dbname=ent;host=127.0.0.1 ′;
$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)槭褂昧讼蛸Y料庫(kù)的持久連接而得到最佳化。持久連接不會(huì)在腳本結(jié)束時(shí)關(guān)閉,
相反它會(huì)被緩存起來(lái)並在另一個(gè)腳本通過(guò)相同的標(biāo)識(shí)請(qǐng)求一個(gè)連接時(shí)得以重新利用。
持久連線的快取可以讓你避免在腳本每次需要與資料庫(kù)對(duì)話時(shí)都要部署一個(gè)新的連線的資源消耗,讓你的網(wǎng)路應(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í)行回溯。
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` `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)透過(guò)PDO建立了連接,在部署
?>
現(xiàn)在你已經(jīng)透過(guò)PDO建立了連接,在部署}
?>現(xiàn)在你已經(jīng)透過(guò)PDO建立了連接,在部署
}?>
現(xiàn)在你已經(jīng)透過(guò)PDO建立了連接,在部署查詢之前你必須搞清楚PDO是怎麼管理事務(wù)的。性(Atomicity, Consistency, Isolation and Durability,ACID)通俗一點(diǎn)講,一個(gè)事務(wù)中所有的工作在提交時(shí),即使它是分階段執(zhí)行的,也要保證安全地應(yīng)用於資料庫(kù),不被其他的連接幹?jǐn)_。事務(wù)工作也可以在請(qǐng)求發(fā)生錯(cuò)誤時(shí)輕鬆地自動(dòng)取消。事務(wù)可以使你的腳本更快速同時(shí)可能更健壯(要實(shí)現(xiàn)這個(gè)優(yōu)點(diǎn)你仍然需要正確的使用它們)。在被認(rèn)為是「自動(dòng)提交」的模式下。一個(gè)事務(wù),你必須使用PDO->beginTransaction()?方法來(lái)建立一個(gè)。如果底層驅(qū)動(dòng)不支援事務(wù)處理,一個(gè)PDOException就會(huì)被拋出(與你的例外處理設(shè)定無(wú)關(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ì)於腳本意外終止的情況來(lái)說(shuō)是一個(gè)安全的方案——如果你沒(méi)有明確地提交事務(wù),它將會(huì)假設(shè)發(fā)生了一些錯(cuò)誤,為了你資料的安全,所以就執(zhí)行回滾了。 ????二、PDOStatement??PDOStatement->bindColumn() — 將欄位綁定到PHP 變數(shù)
PDOStatement->bindParam() — 將參數(shù)綁定到指定的變數(shù)名稱
PDOStatement->bindValue() — 將值綁定到參數(shù)
PDOStatement -> closeCursor() — 關(guān)閉遊標(biāo),使語(yǔ)句能夠再次執(zhí)行。
PDOStatement->columnCount() — 傳回結(jié)果集中的列數(shù)
PDOStatement->errorCode() — 取得關(guān)聯(lián)的SQLSTATE與語(yǔ)句柄上的最後一個(gè)運(yùn)算
PDOStatement->errorInfo() — 取得與語(yǔ)句柄上的最後一個(gè)句柄上的最後一個(gè)句柄上的最後一個(gè)句柄上的最後一個(gè)句柄操作相關(guān)的擴(kuò)充錯(cuò)誤訊息
PDOStatement->execute() — 執(zhí)行準(zhǔn)備好的語(yǔ)句
PDOStatement->fetch( ) — 從結(jié)果集中取得下一行
PDOStatement->fetchAll() — 傳回包含結(jié)果集所有行的陣列PDOStatement->fetchColumn() — 從結(jié)果集中的下一行傳回單一欄位
PDOStatement->fetchObject() — 取得下一行並將其作為物件傳回。
PDOStatement->getAttribute() — 擷取語(yǔ)句屬性
PDOStatement->getColumnMeta() — 傳回結(jié)果中列的元資料set
PDOStatement->nextRowset() — 前進(jìn)到多行集語(yǔ)句集柄中的一個(gè)下行下的一個(gè)行下碼PDOStatement ->rowCount() — 傳回受最後一個(gè)SQL 語(yǔ)句影響的行數(shù)
PDOStatement->setAttribute() — 設(shè)定語(yǔ)句屬性
PDOStatement->setFetchMode() — 設(shè)定此語(yǔ)句的預(yù)設(shè)取得模式
三、PDOException提供了三種不同的錯(cuò)誤處理策略。
這是預(yù)設(shè)使用的模式。 PDO會(huì)在語(yǔ)句和資料庫(kù)物件上設(shè)定簡(jiǎn)單的錯(cuò)誤代號(hào),你可以使用PDO->errorCode() 和PDO->errorInfo() 方法來(lái)檢查錯(cuò)誤;如果錯(cuò)誤是在對(duì)statement物件進(jìn)行呼叫時(shí)導(dǎo)致的,你就可以在那個(gè)物件上使用PDOStatement->errorCode() 或PDOStatement->errorInfo() 方法來(lái)取得錯(cuò)誤訊息。而如果錯(cuò)誤是在對(duì)database物件呼叫時(shí)導(dǎo)致的,你就應(yīng)該在這個(gè)資料庫(kù)物件上呼叫那兩個(gè)方法。
2. PDO::ERRMODE_WARNING作為設(shè)定錯(cuò)誤代號(hào)的附加,PDO將發(fā)布一個(gè)傳統(tǒng)的E_WARNING資訊。這種設(shè)定在調(diào)試和調(diào)試時(shí)是很有用的,如果你只是想看看發(fā)生什麼問(wèn)題而不想中斷程式的流程的話。
3. PDO::ERRMODE_EXCEPTION
作為設(shè)定錯(cuò)誤代號(hào)的附件,PDO會(huì)拋出一個(gè)PDOException異常並設(shè)定它的屬性來(lái)反映錯(cuò)誤代號(hào)和錯(cuò)誤訊息。這中設(shè)定在調(diào)試時(shí)也是很有用的,因?yàn)樗麜?huì)有效的“放大” (炸毀)”腳本中的錯(cuò)誤點(diǎn),非??焖俚闹赶蛞粋€(gè)你代碼中可能出錯(cuò)的區(qū)域。(記?。喝绻惓?dǎo)致腳本事務(wù),處理會(huì)自動(dòng)回滾。 ,也能夠更明確地檢查每個(gè)資料庫(kù)存取的回傳值。的代號(hào)對(duì)應(yīng)到適當(dāng)?shù)腟QLSTATE代號(hào)上。它傳回可以包含一個(gè)包含了SQLSTATE 代號(hào),特定的資料庫(kù)驅(qū)動(dòng)的錯(cuò)誤代號(hào)和特定資料庫(kù)驅(qū)動(dòng)的錯(cuò)誤說(shuō)明字串。 :ATTR_ERRMODE,?PDO::ERRMODE_WARNING);
?> ;
屬性清單:
PDO::PARAM_BOOL
表示一個(gè)布林型別
PDO::PARAM_NULL
表示一個(gè)SQL中的NULL型別
PDO::PARAM_INT
表示一個(gè)SQL中的INTEGER型別
VARCHAR類型
PDO::PARAM_LOB
表示一個(gè)SQL中的large?object類型
PDO::PARAM_STMT
表示一個(gè)SQL中的recordset類型,還沒(méi)有被支援
PDO::PARAM_INPUT_OUTPUTtheparaanterh; stored?procedure.?Youmust?bitwise-OR?this?value?with?an?explicit?PDO::PARAM_*?data?type.
PDO::FETCH_LAZY::將每一行結(jié)果作為一個(gè)標(biāo)鍵傳回
PDO::FETCH_LAZY::將每一行結(jié)果作為一個(gè)標(biāo)物傳回
PDO::FETCH_LAZY::結(jié)果集,名稱相同的資料只傳回一個(gè)
PDO::FETCH_NAMED
僅傳回以鍵值為下標(biāo)的查詢的結(jié)果集,名稱相同的資料以陣列形式傳回
PDO::FETCH_NUM
僅傳回以數(shù)字為下標(biāo)的查詢的結(jié)果集
PDO::FETCH_BOTH
同時(shí)傳回以鍵值和數(shù)字作為下標(biāo)的查詢的結(jié)果集
PDO::FETCH_OBJ
以物件的形式傳回結(jié)果集
PDO::FETCH_BOUND
將PDOStatement::bindParam(和PDOStatement::bindColumn()所綁定的值作為變數(shù)名稱賦值後傳回
PDO::FETCH_COLUMN
表示僅傳回結(jié)果集中的某一列
PDO::FETCH_CLASS
表示以類別的形式傳回結(jié)果集
PDO:: FETCH_INTO
表示將資料合併入一個(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
表示將資料合併入一個(gè)存在的類別中並序列化回傳
PDO::FETCH_PROPS_LATE
Available?since?PHP?5.5.0時(shí)候,PDO會(huì)自動(dòng)嘗試停止接受委託,開(kāi)始執(zhí)行
PDO::ATTR_PREFETCH
設(shè)定應(yīng)用程式提前取得的資料大小,並非所有的資料庫(kù)哦度支援
PDO::ATTR_TIMEOUT
設(shè)定連接資料庫(kù)逾時(shí)的值
PDO:: ATTR_ERRMODE
設(shè)定Error處理的模式
PDO::ATTR_SERVER_VERSION
設(shè)定Error處理的模式
PDO::ATTR_SERVER_VERSION
設(shè)定為Error處理的模式
PDO::ATTR_SERVER_VERSION
只讀屬性,表示PDO連線的伺服器端資料庫(kù)版本
PDO::ATTR_CLIENT_VERSION
只讀特性,只讀屬性,表示PDO連接的伺服器的meta資訊
PDO::ATTR_CONNECTION_STATUS
PDO::ATTR_CASE
透過(guò)PDO::CASE_*中的內(nèi)容對(duì)列的形式進(jìn)行操作
PDO::ATTR_CURSOR_NAME
取得或設(shè)定指標(biāo)的名稱
PDO::ATTR_CURSOR
設(shè)定指標(biāo)的類型,PDO現(xiàn)在支援PDO::CURSOR_FWDONLY和PDO::CURSOR_FWDONLY
PDO::ATTR_DRIVER_NAME
AC.驅(qū)動(dòng)的名稱
PDO::ATTR_DRIVER_NAME
AC為SQL的NULL
PDO::ATTR_PERSISTENT
取得一個(gè)存在的連線
PDO::ATTR_STATEMENT_CLASS
PDO::ATTR_FETCH_CATALOG_NAMES
在傳回的結(jié)果集中,使用自訂目錄名稱來(lái)取代名稱名稱。
PDO::ATTR_FETCH_TABLE_NAMES
在傳回的結(jié)果集中,使用自訂表格名稱來(lái)取代欄位名稱。
PDO::ATTR_STRINGIFY_FETCHES
PDO::ATTR_MAX_COLUMN_LEN
PDO::ATTR_DEFAULT_FETCH_MODE
Available?since?PHP?5.2.0
PDO_RsinEM?
PDO::ERRMODE_SILENT
發(fā)生錯(cuò)誤時(shí)不報(bào)告任何的錯(cuò)誤訊息,是預(yù)設(shè)值
PDO::ERRMODE_WARNING
發(fā)生錯(cuò)誤時(shí)發(fā)出一條php的E_WARNING的訊息
PDO::ERRMODE_EXCEPTION
發(fā)生錯(cuò)誤時(shí)拋出一個(gè)PDOException
PDO::CASE_NATURALAL發(fā)生錯(cuò)誤時(shí)拋出一個(gè)PDOException
PDO::CASE_NATURALALAL發(fā)生錯(cuò)誤時(shí)拋出一個(gè)PDOException
PDO::CASE_NATURALALAL 您
強(qiáng)制列的名字小寫(xiě)
PDO::CASE_UPPER
強(qiáng)制列的名字大寫(xiě)
PDO::NULL_NATURAL
PDO::NULL_EMPTY_STRING
PDO::NULL_TO_STRING
PPDO::FETCH功能時(shí)有效
PDO::FETCH_ORI_PRIOR
取得結(jié)果集中的上一行數(shù)據(jù),僅在有指標(biāo)功能時(shí)有效
PDO::FETCH_ORI_FIRST
取得結(jié)果集中的第一行數(shù)據(jù),僅在有指標(biāo)功能時(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ù),僅在有指標(biāo)功能時(shí)有效
PDO::CURSOR_FWDONLY
建立一個(gè)只能向後的指標(biāo)操作對(duì)象
PDO::CURSOR_SCROLL
建立一個(gè)指標(biāo)操作對(duì)象,傳遞PDO::FETCH_ORI_*中的內(nèi)容來(lái)控制結(jié)果集
PDO::ERR_NONE?(string)
設(shè)定沒(méi)有錯(cuò)誤時(shí)候的錯(cuò)誤訊息
PDO::PARAM_EVT_ALLOC
Allocation?event
PDO::PARAM_EVT_FREE
Deallocation?event
PDO::PARAM_EVT_FREE
Deallocation?event
PDO::PARAM_EVP::M事件在執(zhí)行準(zhǔn)備好的語(yǔ)句之前觸發(fā)。
PDO::PARAM_EVT_EXEC_POST
事件在執(zhí)行準(zhǔn)備的語(yǔ)句之後觸發(fā)。
PDO::PARAM_EVT_FETCH_PRE
事件在從 a 取得結(jié)果之前觸發(fā)結(jié)果集.
PDO::PARAM_EVT_FETCH_POST
事件從結(jié)果集中取得結(jié)果後觸發(fā)。
PDO::PARAM_EVT_NORMALIZE
綁定參數(shù)註冊(cè)期間觸發(fā)的事件,允許驅(qū)動(dòng)程式標(biāo)準(zhǔn)化參數(shù)名稱。
更多PHP PDO函數(shù)庫(kù)詳解相關(guān)文章請(qǐng)關(guān)注PHP中文網(wǎng)!

熱AI工具

Undress AI Tool
免費(fèi)脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門(mén)文章

熱工具

記事本++7.3.1
好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6
視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版
神級(jí)程式碼編輯軟體(SublimeText3)
