国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
PHP PDO函數(shù)庫詳解,pdo函數(shù)庫詳解
首頁 后端開發(fā) php教程 PHP PDO函數(shù)庫詳解,pdo函數(shù)庫詳解_PHP教程

PHP PDO函數(shù)庫詳解,pdo函數(shù)庫詳解_PHP教程

Jul 12, 2016 am 08:58 AM
pdo php 作用 函數(shù) 抽象 數(shù)據(jù)庫 訪問 詳解

PHP PDO函數(shù)庫詳解,pdo函數(shù)庫詳解

?

?

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

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

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

一、PDO

PDO->beginTransaction()?— 標明回滾起始點
PDO->commit() — 標明回滾結(jié)束點,并執(zhí)行SQL
PDO->rollBack() — 執(zhí)行回滾
PDO->__construct() — 建立一個PDO鏈接數(shù)據(jù)庫的實例
PDO->errorCode() — 獲取錯誤碼
PDO->errorInfo() — 獲取錯誤的信息
PDO->exec() — 處理一條SQL語句,并返回所影響的條目數(shù)
PDO->getAttribute() — 獲取一個“數(shù)據(jù)庫連接對象”的屬性
PDO->getAvailableDrivers() — 獲取有效的PDO驅(qū)動器名稱
PDO->lastInsertId() — 獲取寫入的最后一條數(shù)據(jù)的主鍵值
PDO->prepare() — 生成一個“查詢對象”
PDO->query() — 處理一條SQL語句,并返回一個“PDOStatement”
PDO->quote() — 為某個SQL中的字符串添加引號
PDO->setAttribute() — 為一個“數(shù)據(jù)庫連接對象”設(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)用會因為使用了向數(shù)據(jù)庫的持久連接而得到優(yōu)化。持久連接不會在腳本結(jié)束時關(guān)閉,
相反它會被緩存起來并在另一個腳本通過同樣的標識請求一個連接時得以重新利用。
持久連接的緩存可以使你避免在腳本每次需要與數(shù)據(jù)庫對話時都要部署一個新的連接的資源消耗,讓你的Web應(yīng)用更加快速。
上面實例中的array(PDO::ATTR_PERSISTENT => true)就是把連接類型設(shè)置為持久連接。

詳解2) PDO中的事務(wù)
PDO->beginTransaction(),PDO->commit(),PDO->rollBack()這三個方法是在支持回滾功能時一起使用的。PDO->beginTransaction()方法標明起始點,PDO->commit()方法標明回滾結(jié)束點,并執(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` ,`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個主要的特性:原子性,一致性,獨立性和持久性(Atomicity, Consistency, Isolation and Durability,ACID)通俗一點講,一個事務(wù)中所有的工作在提交時,即使它是分階段執(zhí)行的,也要保證安全地應(yīng)用于數(shù)據(jù)庫,不被其他的連接干擾。事務(wù)工作也可以在請求發(fā)生錯誤時輕松地自動取消。

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

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

當腳本結(jié)束時或一個連接要關(guān)閉時,如果你還有一個未處理完的事務(wù),PDO將會自動將其回滾。這是對于腳本意外終止的情況來說是一個安全的方案——如果你沒有明確地提交事務(wù),它將會假設(shè)發(fā)生了一些錯誤,為了你數(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中不同的錯誤處理策略。
1. PDO::ERRMODE_SILENT
這是默認使用的模式。PDO會在statement和database對象上設(shè)定簡單的錯誤代號,你可以使用PDO->errorCode() 和 PDO->errorInfo() 方法檢查錯誤;如果錯誤是在對statement對象進行調(diào)用時導(dǎo)致的,你就可以在那個對象上使用 PDOStatement->errorCode() 或 PDOStatement->errorInfo() 方法取得錯誤信息。而如果錯誤是在對database對象調(diào)用時導(dǎo)致的,你就應(yīng)該在這個database對象上調(diào)用那兩個方法。
2. PDO::ERRMODE_WARNING
作為設(shè)置錯誤代號的附加,PDO將會發(fā)出一個傳統(tǒng)的E_WARNING信息。這種設(shè)置在除錯和調(diào)試時是很有用的,如果你只是想看看發(fā)生了什么問題而不想中斷程序的流程的話。
3. PDO::ERRMODE_EXCEPTION
作為設(shè)置錯誤代號的附件,PDO會拋出一個PDOException異常并設(shè)置它的屬性來反映錯誤代號和錯誤信息。這中設(shè)置在除錯時也是很有用的,因為他會有效的“放大(blow up)”腳本中的出錯點,非常快速的指向一個你代碼中可能出錯區(qū)域。(記?。喝绻惓?dǎo)致腳本中斷,事務(wù)處理回自動回滾。)
異常模式也是非常有用的,因為你可以使用比以前那種使用傳統(tǒng)的PHP風格的錯誤處理結(jié)構(gòu)更清晰的結(jié)構(gòu)處理錯誤,比使用安靜模式使用更少的代碼及嵌套,也能夠更加明確地檢查每個數(shù)據(jù)庫訪問的返回值。
關(guān)于PHP中異常的更多信息請看Exceptions章節(jié)
PDO 使用基于SQL-92 SQLSTATE 的錯誤代號字符串;特定的PDO驅(qū)動應(yīng)當將自己本身的代號對應(yīng)到適當?shù)腟QLSTATE代號上。PDO->errorCode() 方法只返回單一的SQLSTATE代號。如果你需要關(guān)于一個錯誤的更加有針對性的信息,PDO也提供了一個PDO->errorInfo()方法,它可以返回一個包含了SQLSTATE代號,特定數(shù)據(jù)庫驅(qū)動的錯誤代號和特定數(shù)據(jù)庫驅(qū)動的錯誤說明字符串。

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

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1104655.htmlTechArticlePHP PDO函數(shù)庫詳解,pdo函數(shù)庫詳解 PDO是一個數(shù)據(jù)庫訪問抽象層,作用是統(tǒng)一各種數(shù)據(jù)庫的訪問接口,與mysql和mysqli的函數(shù)庫相比,PDO讓跨數(shù)據(jù)...
本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權(quán)歸原作者所有,本站不承擔相應(yīng)法律責任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機

Video Face Swap

Video Face Swap

使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

如何設(shè)置PHP時區(qū)? 如何設(shè)置PHP時區(qū)? Jun 25, 2025 am 01:00 AM

tosetTherightTimeZoneInphp,restate_default_timezone_set()functionAtthestArtofyourscriptWithavalIdidentIdentifiersuchas'america/new_york'.1.usedate_default_default_timezone_set_set()

編寫清潔和可維護的PHP代碼的最佳實踐是什么? 編寫清潔和可維護的PHP代碼的最佳實踐是什么? Jun 24, 2025 am 12:53 AM

寫干凈、易維護的PHP代碼關(guān)鍵在于清晰命名、遵循標準、合理結(jié)構(gòu)、善用注釋和可測試性。1.使用明確的變量、函數(shù)和類名,如$userData和calculateTotalPrice();2.遵循PSR-12標準統(tǒng)一代碼風格;3.按職責拆分代碼結(jié)構(gòu),使用MVC或Laravel式目錄組織;4.避免面條式代碼,將邏輯拆分為單一職責的小函數(shù);5.在關(guān)鍵處添加注釋并撰寫接口文檔,明確參數(shù)、返回值和異常;6.提高可測試性,采用依賴注入、減少全局狀態(tài)和靜態(tài)方法。這些做法提升代碼質(zhì)量、協(xié)作效率和后期維護便利性。

如何使用PHP執(zhí)行SQL查詢? 如何使用PHP執(zhí)行SQL查詢? Jun 24, 2025 am 12:54 AM

Yes,youcanrunSQLqueriesusingPHP,andtheprocessinvolveschoosingadatabaseextension,connectingtothedatabase,executingqueriessafely,andclosingconnectionswhendone.Todothis,firstchoosebetweenMySQLiorPDO,withPDObeingmoreflexibleduetosupportingmultipledatabas

如何在PHP中使用頁面緩存? 如何在PHP中使用頁面緩存? Jun 24, 2025 am 12:50 AM

PHP頁面緩存可通過減少服務(wù)器負載和加快頁面加載速度提升網(wǎng)站性能。1.基本文件緩存通過生成靜態(tài)HTML文件并在有效期內(nèi)提供服務(wù),避免重復(fù)生成動態(tài)內(nèi)容;2.啟用OPcache可將PHP腳本編譯為字節(jié)碼存儲在內(nèi)存中,提升執(zhí)行效率;3.對帶參數(shù)的動態(tài)頁面,應(yīng)根據(jù)URL參數(shù)分別緩存,并避免緩存用戶特定內(nèi)容;4.可使用輕量級緩存庫如PHPFastCache簡化開發(fā)并支持多種存儲驅(qū)動。結(jié)合這些方法能有效優(yōu)化PHP項目的緩存策略。

如何快速測試PHP代碼片段? 如何快速測試PHP代碼片段? Jun 25, 2025 am 12:58 AM

toquicklytestaphpcodesnippet,useanonlinephpsandboxlike3v4l.orgorphpize.onlineforinstantantantExecutionWithOutSetup; runco??delocalocallocallocallocallocallocallywithpplibycreatinga.phpfileandexecutingitviateringitviatheterminal;

如何防止PHP中的跨站點偽造偽造(CSRF)攻擊? 如何防止PHP中的跨站點偽造偽造(CSRF)攻擊? Jun 28, 2025 am 02:25 AM

TopreventCSRFattacksinPHP,implementanti-CSRFtokens.1)Generateandstoresecuretokensusingrandom_bytes()orbin2hex(random_bytes(32)),savethemin$_SESSION,andincludetheminformsashiddeninputs.2)ValidatetokensonsubmissionbystrictlycomparingthePOSTtokenwiththe

如何升級PHP版本? 如何升級PHP版本? Jun 27, 2025 am 02:14 AM

升級PHP版本其實不難,但關(guān)鍵在于操作步驟和注意事項。以下是具體方法:1.確認當前PHP版本及運行環(huán)境,使用命令行或phpinfo.php文件查看;2.選擇適合的新版本并安裝,推薦8.2或8.1,Linux用戶用包管理器安裝,macOS用戶用Homebrew;3.遷移配置文件和擴展,更新php.ini并安裝必要擴展;4.測試網(wǎng)站是否正常運行,檢查錯誤日志確保無兼容性問題。按照這些步驟操作,大多數(shù)情況都能順利完成升級。

PHP中MySQLI和PDO有什么區(qū)別? PHP中MySQLI和PDO有什么區(qū)別? Jun 24, 2025 am 12:56 AM

何時chosingbetweewmysqliandpdoforphpdatabaseconnectivity,thedecisiondecisiondecisiondepificprojectneed.s.1.pdosupportsmultipledatab Ases,MakeiteAsierToswitchBetwithewithemysql,Postgresql,orsqliteWithMinimalCodechanges,而lelemysqliislimitedtomysqlonly.2.bothoffer

See all articles