對(duì)PHP PDO的一些認(rèn)識(shí)小結(jié)
1、PDO(PHP Data Object)擴(kuò)展為PHP定義了一個(gè)訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)的輕量、持久的接口。實(shí)現(xiàn)PDO接口的每一種數(shù)據(jù)庫(kù)驅(qū)動(dòng)都能以正則擴(kuò)展的形式把各自的特色表現(xiàn)出來(lái)。
主要:PDO擴(kuò)展只是一個(gè)抽象的接口層,利用PDO擴(kuò)展本身并不能實(shí)現(xiàn)任何數(shù)據(jù)庫(kù)操作,必須使用一個(gè)特定的數(shù)據(jù)庫(kù)PDO驅(qū)動(dòng)訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)
2、啟動(dòng)PDO方法:找到php.ini文件將
;extension=php_pdo.dll
前的分號(hào)去掉即可(linux環(huán)境下類(lèi)似)
3、PDO預(yù)定義類(lèi):
PDO包含了三個(gè)預(yù)定義類(lèi):PDO、PDOStatement、PDOException
?。?)PDO類(lèi):代表一個(gè)PHP和數(shù)據(jù)庫(kù)之間的連接
PDO:構(gòu)造器,創(chuàng)建一個(gè)新的PDO對(duì)象
beginTransaction:開(kāi)始事務(wù)
commit:提交事務(wù)
errorCode:從數(shù)據(jù)庫(kù)返回一個(gè)錯(cuò)誤代號(hào),如果有的話(huà)
errorInfo:從數(shù)據(jù)庫(kù)返回一個(gè)含有錯(cuò)誤信息的數(shù)組,如果有的話(huà)
exec:執(zhí)行一條SQL語(yǔ)句并返回影響的行數(shù)
getAttribute:返回一個(gè)數(shù)據(jù)庫(kù)的連接屬性
lastInsertId:返回最新插入到數(shù)據(jù)庫(kù)的行(ID)
prepare:為執(zhí)行準(zhǔn)備一條SQL語(yǔ)句,返回語(yǔ)句執(zhí)行后的聯(lián)合結(jié)果集
query:執(zhí)行一條SQL語(yǔ)句并返回結(jié)果集
rollBack:回滾一個(gè)事務(wù)
setAttribute:設(shè)置一個(gè)數(shù)據(jù)庫(kù)連接屬性
(2)PDOStatement類(lèi):代表一條預(yù)處理語(yǔ)句以及語(yǔ)句執(zhí)行后的聯(lián)合結(jié)果集
bindColomn:綁定一個(gè)PHP變量到結(jié)果集輸出列
bindParam:綁定一個(gè)變量到PHP預(yù)處理語(yǔ)句中的參數(shù)
bindValue:綁定一個(gè)值到處理語(yǔ)句中的參數(shù)
closeCursor:關(guān)閉游標(biāo),使語(yǔ)句可以再次執(zhí)行
cloumnCount:返回結(jié)果集中列的數(shù)量
errorCode:從語(yǔ)句中返回一個(gè)錯(cuò)誤代號(hào),如果有的話(huà)
errorInfo:從語(yǔ)句中返回包含錯(cuò)誤信息的數(shù)組
execute:執(zhí)行一條預(yù)處理語(yǔ)句
fetch:從結(jié)果集中取出一行
fetchAll:從結(jié)果集中取出一個(gè)包含所有行的數(shù)組
fetchColomn:返回結(jié)果集中某一列的數(shù)據(jù)
getAttribute:返回一個(gè)PDOStatement屬性
getColomnMeta:返回結(jié)果集中某一列的結(jié)構(gòu)
nextRowset:返回下一個(gè)結(jié)果集
rowCount:返回SQL語(yǔ)句執(zhí)行后影響的行數(shù)
setAttribute:設(shè)置一個(gè)PDOStatement屬性
setFetchMode:為PDOStatement設(shè)定獲取數(shù)據(jù)
給一個(gè)事務(wù)處理的簡(jiǎn)單例子:
<?php
/*
事務(wù)處理
MYSQL 表引擎 MyISAM InnoDB
添加字段 alter table user add money int not null default 0;
查看表引擎 show create table user
修改表引擎 alter table user engine=InnoDB
*/
try{
//實(shí)例化PDO
$pdo=new PDO("mysql:host=localhost;dbname=photo","root","123456"。array('3'=>'2'));
}catch(PDOException $e){
echo $e->getMessage();
}
//設(shè)置字符集
$sql="set name utf8";
$pdo->exec($sql);
//開(kāi)啟事務(wù)處理
$pdo->beginTransaction();
$num=250;
$sql="update user set money=money-{$num} where id =1";
$rows=$pdo->exec($sql);
$sql="update user set monet=money-{$num} where id=2";
$rows+=$pdo->exec($sql);
//結(jié)束事務(wù)處理
if($rows==2){
$pdo->commit();
}else{
$pdo->rollBack();
}
?>
(事務(wù)的主要特性:原子性、一致性、獨(dú)立性和持久性)
4、PDO最大的特點(diǎn)是引入了參數(shù)綁定和預(yù)編譯
預(yù)編譯負(fù)責(zé)兩件事,轉(zhuǎn)移和軟解析提速。程序要支持預(yù)編譯,除了數(shù)據(jù)庫(kù)支持外,還需要驅(qū)動(dòng)支持(PDO和NySQLi支持)
5、PDO的效率問(wèn)題
(1)在一個(gè)大表大數(shù)據(jù)量中進(jìn)行測(cè)試,PDO的CRUD效率比MySql直連低5%~15%,并且方差大于MySQL直連
?。?)至于負(fù)載方面,PDO開(kāi)啟長(zhǎng)連接后負(fù)載高于MySQL且比較穩(wěn)定。
其實(shí)在實(shí)際應(yīng)用中,90%的程序是不會(huì)進(jìn)行數(shù)據(jù)庫(kù)遷移的,有數(shù)據(jù)庫(kù)遷移的應(yīng)用程序少之又少。
- php使用pdo連接mssql server數(shù)據(jù)庫(kù)實(shí)例
- 關(guān)于php連接mssql:pdo odbc sql server
- php使用pdo連接sqlite3的配置示例
- PHP中PDO的事務(wù)處理分析
- PHP的PDO常用類(lèi)庫(kù)實(shí)例分析
- PHP的PDO操作簡(jiǎn)單示例
- php中PDO方式實(shí)現(xiàn)數(shù)據(jù)庫(kù)的增刪改查
- php中數(shù)據(jù)庫(kù)連接方式pdo和mysqli對(duì)比分析
- PHP封裝的MSSql操作類(lèi)完整實(shí)例
- PHP連接MSSQL方法匯總
- php查詢(xún)mssql出現(xiàn)亂碼的解決方法
- php基于PDO連接MSSQL示例DEMO
相關(guān)文章
PHP標(biāo)準(zhǔn)庫(kù)(PHP SPL)詳解
今天小編就為大家分享一篇關(guān)于PHP標(biāo)準(zhǔn)庫(kù)(PHP SPL)詳解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03php7連接MySQL實(shí)現(xiàn)簡(jiǎn)易查詢(xún)程序的方法
這篇文章主要給大家介紹了關(guān)于php7連接MySQL實(shí)現(xiàn)簡(jiǎn)易查詢(xún)程序的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10php檢測(cè)apache mod_rewrite模塊是否安裝的方法
這篇文章主要介紹了php檢測(cè)apache mod_rewrite模塊是否安裝的方法,通過(guò)對(duì)apache mod_rewrite模塊相關(guān)函數(shù)的檢測(cè)實(shí)現(xiàn)該檢測(cè)功能,需要的朋友可以參考下2015-03-03dedecms采集中可以過(guò)濾多行代碼的正則表達(dá)式
dedecms采集中可以過(guò)濾多行代碼的正則表達(dá)式...2007-03-03php防止sql注入之過(guò)濾分頁(yè)參數(shù)實(shí)例
這篇文章主要介紹了php防止sql注入中過(guò)濾分頁(yè)參數(shù)的方法,實(shí)例展示了針對(duì)分頁(yè)參數(shù)的數(shù)值判斷問(wèn)題,是非常具有實(shí)用價(jià)值的技巧,需要的朋友可以參考下2014-11-11php 實(shí)現(xiàn)賬號(hào)不能同時(shí)登陸的方法分析【當(dāng)其它地方登陸時(shí),當(dāng)前賬號(hào)失效】
這篇文章主要介紹了php 實(shí)現(xiàn)賬號(hào)不能同時(shí)登陸的方法,結(jié)合實(shí)例形式分析了PHP基于session實(shí)現(xiàn)當(dāng)其它地方登陸時(shí),當(dāng)前賬號(hào)失效的相關(guān)操作技巧,需要的朋友可以參考下2020-03-03PHP數(shù)組無(wú)限分級(jí)數(shù)據(jù)的層級(jí)化處理代碼
在很多朋友寫(xiě)無(wú)限級(jí)分類(lèi)數(shù)據(jù)時(shí)都直接使用遞歸來(lái)操作,下面我來(lái)介紹一下關(guān)于PHP無(wú)限分級(jí)代碼優(yōu)化方法,有需要的朋友可參考一下2012-12-12PHP實(shí)現(xiàn)將瀏覽歷史頁(yè)面網(wǎng)址保存到cookie的方法
這篇文章主要介紹了PHP實(shí)現(xiàn)將瀏覽歷史頁(yè)面網(wǎng)址保存到cookie的方法,涉及php對(duì)cookie的讀取、字符串轉(zhuǎn)化及保存等技巧,需要的朋友可以參考下2015-01-01