PHP數(shù)據(jù)對(duì)象-PDO

PDO概述

以往,PHP對(duì)不同的數(shù)據(jù)庫(kù)有著不同支持的擴(kuò)展函數(shù),如果在項(xiàng)目中要切換數(shù)據(jù)庫(kù),則要進(jìn)行相當(dāng)于返工重構(gòu)的工作量反粥。
引入PDO的概念后, PHP有了一個(gè)對(duì)數(shù)據(jù)庫(kù)同一進(jìn)行操作的對(duì)象:

PDO的全稱(chēng)是:PHP Data Object(PHP數(shù)據(jù)對(duì)象)在新版本的PHP(PHP5以上)中,PHP為用戶(hù)封裝了一套PDO擴(kuò)展庫(kù)谓松,專(zhuān)門(mén)用來(lái)操作不同類(lèi)型的數(shù)據(jù)庫(kù)星压!

———————————————————————————————————————

PDO具體實(shí)現(xiàn):

開(kāi)啟PDO擴(kuò)展:

PHP.INI中開(kāi)啟pdo_pdo.dll ,并開(kāi)啟對(duì)應(yīng)數(shù)據(jù)庫(kù)的擴(kuò)展

PDO的實(shí)例化:

PDO的擴(kuò)展庫(kù)是面對(duì)對(duì)象封裝的,內(nèi)部結(jié)構(gòu):

  • PDO::__construct — 創(chuàng)建一個(gè)表示數(shù)據(jù)庫(kù)連接的 PDO 實(shí)例
  • PDO::beginTransaction — 啟動(dòng)一個(gè)事務(wù)
  • PDO::commit — 提交一個(gè)事務(wù)
  • PDO::errorCode — 獲取跟數(shù)據(jù)庫(kù)句柄上一次操作相關(guān)的 SQLSTATE
  • PDO::errorInfo — Fetch extended error information associated with the last operation on the database handle
  • PDO::exec — 執(zhí)行一條 SQL 語(yǔ)句,并返回受影響的行數(shù)
  • PDO::getAttribute — 取回一個(gè)數(shù)據(jù)庫(kù)連接的屬性
  • PDO::getAvailableDrivers — 返回一個(gè)可用驅(qū)動(dòng)的數(shù)組
  • PDO::inTransaction — 檢查是否在一個(gè)事務(wù)內(nèi)
  • PDO::lastInsertId — 返回最后插入行的ID或序列值
  • PDO::prepare — Prepares a statement for execution and returns a statement object
  • PDO::query — Executes an SQL statement, returning a result set as a PDOStatement object
  • PDO::quote — Quotes a string for use in a query.
  • PDO::rollBack — 回滾一個(gè)事務(wù)
  • PDO::setAttribute — 設(shè)置屬性

1鬼譬、構(gòu)造函數(shù)-設(shè)置數(shù)據(jù)源:
PDO::__construct ( string $dsn [, string $username [, string $password [, array $driver_options ]]] )
創(chuàng)建一個(gè)表示連接到請(qǐng)求數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)連接 PDO 實(shí)例娜膘。

第一個(gè)參數(shù):$dsn : data source name數(shù)據(jù)源名稱(chēng),其實(shí)就是告訴PDO類(lèi)應(yīng)該選擇哪種類(lèi)型的數(shù)據(jù)庫(kù)优质,主機(jī)名和端口號(hào)是什么竣贪,選擇哪個(gè)數(shù)據(jù)庫(kù)以及采用什么樣的字符編碼。
例如:

$dbms=‘mysq1‘巩螃;
$port=‘3306‘演怎;
$dbname=‘?dāng)?shù)據(jù)庫(kù)名‘;
$charset=‘utf8‘避乏;
$dsn=“$dbms:host=$host爷耀;port=$port;charset=$charset拍皮;dbname=$dbname”歹叮;
實(shí)例化:
$pdo=new PDO($dsn,$user,$pass);

記一下幾個(gè)重要的方法:

* rowcount(); 返回結(jié)果集行數(shù)
* columncount(); 返回結(jié)果集列數(shù)

PDO statement:

記一下幾個(gè)重要的方法:
1爹橱、利用fetch對(duì)結(jié)果集進(jìn)行遍歷萨螺,fetchAll獲取全部結(jié)果集:

PDOStatement::fetch ([ int $fetch_style [, int $cursor_orientation = PDO::FETCH_ORI_NEXT [, int $cursor_offset = 0 ]]] )

$rows=array();
while($row=$stmt->fetch(PDO::FETCH_ASSOC)){
$rows[]=$row;var_dump($rows);

其中可以攜帶的參數(shù)為:

  • PDO::FETCH_ASSOC:返回一個(gè)索引為結(jié)果集列名的數(shù)組
  • PDO::FETCH_BOTH(默認(rèn)):返回一個(gè)索引為結(jié)果集列名和以0開(kāi)始的列號(hào)的數(shù)組
  • PDO::FETCH_BOUND:返回 TRUE ,并分配結(jié)果集中的列值給 PDOStatement::bindColumn() 方法綁定的 PHP 變量。
  • PDO::FETCH_CLASS:返回一個(gè)請(qǐng)求類(lèi)的新實(shí)例慰技,映射結(jié)果集中的列名到類(lèi)中對(duì)應(yīng)的屬性名椭盏。如果 fetch_style 包含 PDO::FETCH_CLASSTYPE(例如:PDO::FETCH_CLASS | PDO::FETCH_CLASSTYPE),則類(lèi)名由第一列的值決定
  • PDO::FETCH_INTO:更新一個(gè)被請(qǐng)求類(lèi)已存在的實(shí)例惹盼,映射結(jié)果集中的列到類(lèi)中命名的屬性
  • PDO::FETCH_LAZY:結(jié)合使用 PDO::FETCH_BOTHPDO::FETCH_OBJ庸汗,創(chuàng)建供用來(lái)訪問(wèn)的對(duì)象變量名
  • PDO::FETCH_NUM:返回一個(gè)索引為以0開(kāi)始的結(jié)果集列號(hào)的數(shù)組
  • PDO::FETCH_OBJ:返回一個(gè)屬性名對(duì)應(yīng)結(jié)果集列名的匿名對(duì)象
    ———————————————————————————————————————

PDO預(yù)處理:

減輕服務(wù)器連接數(shù)據(jù)庫(kù)壓力

因?yàn)槊看螆?zhí)行的sql語(yǔ)句的命令和結(jié)構(gòu)都是一樣的,只是其中的數(shù)據(jù)不同手报,但是蚯舱,由于采用傳統(tǒng)的執(zhí)行方式,每次都必須傳輸整條sql語(yǔ)句掩蛤,而且對(duì)于MySQL服務(wù)器而言枉昏,得到的每一次的命令都是全新,都是根據(jù)sql語(yǔ)句從0解析并執(zhí)行揍鸟!

基本策略

預(yù)處理的基本策略:

1 將sql語(yǔ)句強(qiáng)制一分為二:

第一部分為前面相同的命令和結(jié)構(gòu)部分

第二部分為后面可變的數(shù)據(jù)部分

在執(zhí)行sql語(yǔ)句的時(shí)候兄裂,首先將前面相同的命令和結(jié)構(gòu)部分發(fā)送給MysQL服務(wù)器,讓MysQL先進(jìn)行預(yù)處理:

相對(duì)應(yīng)的sql語(yǔ)句為:

第一步:準(zhǔn)備擁有占位符的預(yù)處理語(yǔ)句

mysql> prepare 語(yǔ)句名稱(chēng) from“預(yù)處理的sql 語(yǔ)句值1=? 值2=?”阳藻;
其中語(yǔ)句名稱(chēng)就是給后面需要預(yù)處理的sql語(yǔ)句起一個(gè)名字晰奖!

定義參數(shù)變量并傳入, 無(wú)參數(shù)的預(yù)處理就無(wú)這部

mysql> set @param 1= ; set @param 2= ;
多次不同更改只需要改變@param 的值

第三執(zhí)行

mysql>execute 語(yǔ)句名 using 參數(shù)變量 @param 1,@param 2

其在PDO中對(duì)應(yīng)的方法為:

第一步: 調(diào)用prepare得到statement結(jié)果對(duì)象

構(gòu)造有占位符的sql并使用prepare處理

第二步:傳參

bindParam(第幾個(gè)占位符(如果不是用?,用:+字符串站位站位則為字符串綁定),參數(shù))

執(zhí)行

調(diào)用execute 執(zhí)行
———————————————————————————————————————

PDO相關(guān)屬性

設(shè)置 setAttribute :
獲取 getAttribute :


image.png

image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市腥泥,隨后出現(xiàn)的幾起案子匾南,更是在濱河造成了極大的恐慌,老刑警劉巖蛔外,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蛆楞,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡夹厌,警方通過(guò)查閱死者的電腦和手機(jī)豹爹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)矛纹,“玉大人臂聋,你說(shuō)我怎么就攤上這事』蚰希” “怎么了逻住?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)迎献。 經(jīng)常有香客問(wèn)我,道長(zhǎng)腻贰,這世上最難降的妖魔是什么吁恍? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上冀瓦,老公的妹妹穿的比我還像新娘伴奥。我一直安慰自己,他們只是感情好翼闽,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布拾徙。 她就那樣靜靜地躺著,像睡著了一般感局。 火紅的嫁衣襯著肌膚如雪尼啡。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,394評(píng)論 1 310
  • 那天询微,我揣著相機(jī)與錄音崖瞭,去河邊找鬼。 笑死撑毛,一個(gè)胖子當(dāng)著我的面吹牛书聚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播藻雌,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼雌续,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了胯杭?” 一聲冷哼從身側(cè)響起驯杜,我...
    開(kāi)封第一講書(shū)人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎歉摧,沒(méi)想到半個(gè)月后艇肴,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡叁温,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年再悼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片膝但。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡冲九,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出跟束,到底是詐尸還是另有隱情莺奸,我是刑警寧澤,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布冀宴,位于F島的核電站灭贷,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏略贮。R本人自食惡果不足惜甚疟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一仗岖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧览妖,春花似錦轧拄、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至府树,卻和暖如春俐末,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背挺尾。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工鹅搪, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人遭铺。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓丽柿,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親魂挂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子甫题,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • pdo類(lèi)PDO是一個(gè)“數(shù)據(jù)庫(kù)訪問(wèn)抽象層”,作用是統(tǒng)一各種數(shù)據(jù)庫(kù)的訪問(wèn)接口涂召,與mysql和mysqli的函數(shù)庫(kù)相比坠非,...
    桖辶殤閱讀 874評(píng)論 0 0
  • PDO:php數(shù)據(jù)抽象層操作數(shù)據(jù)庫(kù),簡(jiǎn)單理解就是一個(gè)用于操作數(shù)據(jù)庫(kù)的對(duì)象果正; pdo原理 PDO主要分為三大類(lèi): P...
    DragonRat閱讀 783評(píng)論 0 0
  • 一炎码、簡(jiǎn)介 PDO擴(kuò)展為PHP訪問(wèn)數(shù)據(jù)庫(kù)定義了一套輕量級(jí)的接口,PHP通過(guò)調(diào)用接口秋泳,可以很方便的實(shí)現(xiàn)數(shù)據(jù)的增刪改查潦闲。...
    greedycr7閱讀 1,087評(píng)論 0 0
  • pdo基本使用 【PDO是啥】 PDO是PHP 5新加入的一個(gè)重大功能,因?yàn)樵赑HP 5以前的php4/php3都...
    桖辶殤閱讀 1,342評(píng)論 0 4
  • PHP 大小寫(xiě)敏感 在 PHP 中迫皱,所有用戶(hù)定義的函數(shù)歉闰、類(lèi)和關(guān)鍵詞(例如 if、else卓起、echo 等等)都對(duì)大小...
    巴山哥閱讀 805評(píng)論 0 0