對(duì)PHP PDO的一些認(rèn)識(shí)小結(jié)
1、PDO(PHP Data Object)擴(kuò)展為PHP定義了一個(gè)訪問(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)訪問(wèn)數(shù)據(jù)庫(kù)
2、啟動(dòng)PDO方法:找到php.ini文件將
;extension=php_pdo.dll
前的分號(hào)去掉即可(linux環(huán)境下類似)
3、PDO預(yù)定義類:
PDO包含了三個(gè)預(yù)定義類:PDO、PDOStatement、PDOException
(1)PDO類:代表一個(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),如果有的話
errorInfo:從數(shù)據(jù)庫(kù)返回一個(gè)含有錯(cuò)誤信息的數(shù)組,如果有的話
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ù)連接屬性
?。?)PDOStatement類:代表一條預(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),如果有的話
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)題
?。?)在一個(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常用類庫(kù)實(shí)例分析
- PHP的PDO操作簡(jiǎn)單示例
- php中PDO方式實(shí)現(xiàn)數(shù)據(jù)庫(kù)的增刪改查
- php中數(shù)據(jù)庫(kù)連接方式pdo和mysqli對(duì)比分析
- PHP封裝的MSSql操作類完整實(shí)例
- PHP連接MSSQL方法匯總
- php查詢mssql出現(xiàn)亂碼的解決方法
- php基于PDO連接MSSQL示例DEMO
相關(guān)文章
如何解決php domdocument找不到的問(wèn)題
在本篇文章里小編給大家整理的是一篇關(guān)于php domdocument找不到的解決辦法,有需要的朋友們可以跟著學(xué)習(xí)參考下。2021-07-07
php實(shí)現(xiàn)約瑟夫問(wèn)題的方法小結(jié)
這篇文章主要介紹了php實(shí)現(xiàn)約瑟夫問(wèn)題的方法,實(shí)例總結(jié)了兩種常見(jiàn)的實(shí)現(xiàn)約瑟夫問(wèn)題的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03
php array_map()函數(shù)實(shí)例用法
在本篇文章里小編給大家分享了一篇關(guān)于php array_map()函數(shù)實(shí)例用法,有興趣的朋友們可以學(xué)習(xí)下。2021-03-03
PHP設(shè)計(jì)模式之建造者模式定義與用法簡(jiǎn)單示例
這篇文章主要介紹了PHP設(shè)計(jì)模式之建造者模式定義與用法,簡(jiǎn)單描述了建造者模式的概念、原理并結(jié)合實(shí)例形式分析了建造者模式的具體定義與使用方法,需要的朋友可以參考下2018-08-08
ThinkPHP實(shí)現(xiàn)遞歸無(wú)級(jí)分類——代碼少
這篇文章通過(guò)一段簡(jiǎn)短的代碼實(shí)現(xiàn)了ThinkPHP實(shí)現(xiàn)遞歸無(wú)級(jí)分類,,需要的朋友可以參考下2015-07-07
php安全之直接用$獲取值而不$_GET 字符轉(zhuǎn)義
php安全之直接用$獲取值而不$_GET 字符轉(zhuǎn)義,需要的朋友可以參考下2012-06-06

