PDO抽象數(shù)據(jù)層

在進(jìn)度落后的項(xiàng)目中增加人手只會(huì)導(dǎo)致進(jìn)度更加落后纸肉。
----Fred Brooks

什么是PDO溺欧?

PDO全稱Php Data Object(php數(shù)據(jù)對(duì)象),他是一個(gè)支持豐富數(shù)據(jù)庫的訪問接口柏肪,也就是說姐刁,有了PDO,我們不必要使用php提供的相關(guān)函數(shù)來訪問數(shù)據(jù)庫烦味,而是通過PDO提供的接口來訪問

PDO的特點(diǎn)

  • PDO是一個(gè)數(shù)據(jù)庫訪問抽象層聂使,作用是統(tǒng)一各種數(shù)據(jù)庫的訪問接口,PDO相比其他方式來說更高效谬俄。
  • PDO通過輕巧柏靶,清晰,方便的函數(shù)溃论,統(tǒng)一數(shù)據(jù)庫操作
  • PDO吸取數(shù)據(jù)庫交互的教訓(xùn)屎蜓,結(jié)合Php5的新特性,來進(jìn)行方便的數(shù)據(jù)庫操作
  • PDO是模塊化的蔬芥,能夠在需要的時(shí)候?yàn)橛脩魯?shù)據(jù)庫后端加載驅(qū)動(dòng)程序梆靖,而不必重新編譯或安裝整個(gè)應(yīng)用程序

下面我們直接進(jìn)行pdo的使用(注意這里我用的新版的php控汉,所以默認(rèn)為開啟狀態(tài)笔诵,否則需要更改配置php.ini),具體的配置情況我們可以通過phpinfo()查看

鏈接數(shù)據(jù)庫

//數(shù)據(jù)庫種類
$dbms = 'mysql';
//數(shù)據(jù)庫名
$dbname = "surine";
//主機(jī)
$host = 'localhost';
//配置dsn參數(shù)(可以看到格式比較奇怪)
$dsn = "$dbms:host=$host;dbname = $dbname";
try {
   //進(jìn)行鏈接
    $pdo = new PDO($dsn, "root", "");
    echo "MySql鏈接成功";
} catch (Exception $e) {
    echo "錯(cuò)誤日志".$e->getMessage();
}

這里PDO構(gòu)造是接受4個(gè)參數(shù)姑子,第4個(gè)是訪問配置選項(xiàng)乎婿,暫時(shí)不考慮

SQL語句

PDO中可以通過3種方法來執(zhí)行SQL語句

1.exec()

通過這個(gè)函數(shù)來執(zhí)行一些語句,來實(shí)現(xiàn)對(duì)數(shù)據(jù)庫的操作

try {
    $pdo = new PDO('mysql:host=localhost;dbname=surine', "root", "");
    echo "MySql鏈接成功";
    $aff = $pdo->exec("delete from users WHERE user = '1'");
    echo "輸出數(shù)據(jù)街佑,影響行數(shù)".$aff;
} catch (Exception $e) {
    echo "錯(cuò)誤日志".$e->getMessage();
}

這里細(xì)心的讀者會(huì)發(fā)現(xiàn)我修改了連接方式谢翎,采用 直接寫語句的方式把數(shù)據(jù)庫種類捍靠,主機(jī)名稱等傳進(jìn)去,這是因?yàn)槿绻贿@么寫可能出現(xiàn)找不到數(shù)據(jù)庫的情況森逮,那么當(dāng)然我們的數(shù)據(jù)也就沒法操作了榨婆,如果你遇到顯示不了數(shù)據(jù)的情況,可以采用這種寫法褒侧,如果不行良风,可以使用

$pdo->errorInfo()

這個(gè)方法來檢查錯(cuò)誤信息

再比如說,插入數(shù)據(jù)

 $aff = $pdo->exec("insert into users(user,pswd) values('mt','123456')");
2.query()

query方法返回執(zhí)行結(jié)果后的PDO結(jié)果集闷供,那么他的參數(shù)也是一個(gè)sql語句烟央,下面我們演示一下訪問表的例子

 $query="select * from users";//需要執(zhí)行的sql語句
 $arr = $pdo->query($query)->fetchAll();
    foreach ($arr as $var){
        echo "賬號(hào)".$var['user'];
        echo "密碼".$var['pswd']."<br>";
    }

那么我們可以看到,我們用 $pdo->query($query)查詢數(shù)據(jù)歪脏,并且使用fetchAll方法疑俭,將查詢到的數(shù)據(jù)轉(zhuǎn)化格式,最后使用foreach語句進(jìn)行打印

3.prepare()和execute()

這是PDO的預(yù)處理語句里包含的方法婿失,首先通過prepare()方法查詢準(zhǔn)備工作钞艇,通過execute來執(zhí)行查詢,下面是一個(gè)演示

  $query="select * from users";//需要執(zhí)行的sql語句
    $res=$pdo->prepare($query);//準(zhǔn)備查詢語句
    $res->execute();
    $result=$res->fetchAll(PDO::FETCH_ASSOC);
        foreach ($result as $var){
        echo "賬號(hào)".$var['user'];
        echo "密碼".$var['pswd']."<br>";
    }

這樣的打印結(jié)果和上面的一致

4.fetch() 豪硅, fetchAll()

終于說到fetch這里了香璃,在前面用到很多次fetchAll方法
fetch()方法用于獲取結(jié)果集里的下一行
那么fetchAll就是所有行,他們的返回值是一個(gè)array

這里還有一個(gè)fetchColumn()方法舟误,是獲取某一行葡秒,那么傳入的參數(shù)就是一個(gè)int值

錯(cuò)誤處理

我們使用errorcode()方法獲取錯(cuò)誤碼,也可以使用errorInfo()方法獲取詳細(xì)信息嵌溢,通過這些信息眯牧,我們可以得到,代碼出現(xiàn)了什么錯(cuò)誤赖草。

事務(wù)處理

事務(wù)是保證操作正確進(jìn)行的一大解決方法学少,那么PDO也是支持事務(wù)的。那么事務(wù)分為幾個(gè)部分秧骑。

//開啟事務(wù) 
    $pdo->beginTransaction();  
//提交事務(wù)
    $pdo->commit();  
//事務(wù)回滾
 $pdo->rollBack(); 

那么比如說我們添加一條信息到數(shù)據(jù)庫版确,如果添加失敗,防止其產(chǎn)生影響乎折,那么我們可以用回滾來撤銷更改绒疗,下面是一個(gè)例子

try {
    $pdo = new PDO('mysql:host=localhost;dbname=surine', "root", "");
    echo "MySql鏈接成功";

    $pdo->beginTransaction();  //開啟事務(wù)
    $query="insert users(user,pswd)values('this','this')";//需要執(zhí)行的sql語句
    $res=$pdo->prepare($query);//準(zhǔn)備查詢語句
    $res->execute();
    if($res){
        echo "添加數(shù)據(jù)成功";
    }else{
        echo "添加數(shù)據(jù)失敗";
    }
    $pdo->commit();  //數(shù)據(jù)提交

} catch (Exception $e) {
    $pdo->rollBack();  //數(shù)據(jù)回滾
    echo "錯(cuò)誤日志".$e->getMessage();
}

可以看到,我們寫了一個(gè)添加語句骂澄,然后開啟了事務(wù)吓蘑,在執(zhí)行語句后,提交事務(wù),如果發(fā)生問題磨镶,我們?cè)赾atch里也有回滾的操作溃蔫。

總結(jié)

關(guān)于PDO暫時(shí)先記錄這么多,在以后的學(xué)習(xí)中我會(huì)補(bǔ)充更多琳猫。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末伟叛,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子脐嫂,更是在濱河造成了極大的恐慌痪伦,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件雹锣,死亡現(xiàn)場(chǎng)離奇詭異网沾,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蕊爵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門辉哥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人攒射,你說我怎么就攤上這事醋旦。” “怎么了会放?”我有些...
    開封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵饲齐,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我咧最,道長(zhǎng)捂人,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任矢沿,我火速辦了婚禮滥搭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘捣鲸。我一直安慰自己瑟匆,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開白布栽惶。 她就那樣靜靜地躺著愁溜,像睡著了一般算柳。 火紅的嫁衣襯著肌膚如雪郭蕉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天昵骤,我揣著相機(jī)與錄音酣衷,去河邊找鬼交惯。 笑死次泽,一個(gè)胖子當(dāng)著我的面吹牛穿仪,可吹牛的內(nèi)容都是我干的席爽。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼啊片,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼只锻!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起紫谷,我...
    開封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤齐饮,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后笤昨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體祖驱,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年瞒窒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了捺僻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡崇裁,死狀恐怖匕坯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拔稳,我是刑警寧澤葛峻,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站巴比,受9級(jí)特大地震影響术奖,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜轻绞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一腰耙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧铲球,春花似錦挺庞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至然走,卻和暖如春援制,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背芍瑞。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工晨仑, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓洪己,卻偏偏與公主長(zhǎng)得像妥凳,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子答捕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

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

  • pdo類PDO是一個(gè)“數(shù)據(jù)庫訪問抽象層”逝钥,作用是統(tǒng)一各種數(shù)據(jù)庫的訪問接口,與mysql和mysqli的函數(shù)庫相比拱镐,...
    桖辶殤閱讀 869評(píng)論 0 0
  • pdo基本使用 【PDO是啥】 PDO是PHP 5新加入的一個(gè)重大功能艘款,因?yàn)樵赑HP 5以前的php4/php3都...
    桖辶殤閱讀 1,339評(píng)論 0 4
  • Yii提供了強(qiáng)大的數(shù)據(jù)庫編程支持。Yii數(shù)據(jù)訪問對(duì)象(DAO)建立在PHP的數(shù)據(jù)對(duì)象(PDO)extension上...
    layjoy閱讀 2,618評(píng)論 0 6
  • Php:腳本語言沃琅,網(wǎng)站建設(shè)哗咆,服務(wù)器端運(yùn)行 PHP定義:一種服務(wù)器端的HTML腳本/編程語言,是一種簡(jiǎn)單的、面向?qū)ο?..
    廖馬兒閱讀 2,139評(píng)論 2 38
  • 【一】 都市的十字路口,人車匯流之地呜叫,乃是一處奇妙所在空繁,它每天、每時(shí)朱庆、每刻都在上演著一部流動(dòng)的盛泡、紀(jì)實(shí)的《都市眾生相...
    風(fēng)羽白閱讀 338評(píng)論 2 6