對PHP PDO的一些認(rèn)識小結(jié)
1、PDO(PHP Data Object)擴(kuò)展為PHP定義了一個訪問數(shù)據(jù)庫的輕量、持久的接口。實(shí)現(xiàn)PDO接口的每一種數(shù)據(jù)庫驅(qū)動都能以正則擴(kuò)展的形式把各自的特色表現(xiàn)出來。
主要:PDO擴(kuò)展只是一個抽象的接口層,利用PDO擴(kuò)展本身并不能實(shí)現(xiàn)任何數(shù)據(jù)庫操作,必須使用一個特定的數(shù)據(jù)庫PDO驅(qū)動訪問數(shù)據(jù)庫
2、啟動PDO方法:找到php.ini文件將
;extension=php_pdo.dll
前的分號去掉即可(linux環(huán)境下類似)
3、PDO預(yù)定義類:
PDO包含了三個預(yù)定義類:PDO、PDOStatement、PDOException
?。?)PDO類:代表一個PHP和數(shù)據(jù)庫之間的連接
PDO:構(gòu)造器,創(chuàng)建一個新的PDO對象
beginTransaction:開始事務(wù)
commit:提交事務(wù)
errorCode:從數(shù)據(jù)庫返回一個錯誤代號,如果有的話
errorInfo:從數(shù)據(jù)庫返回一個含有錯誤信息的數(shù)組,如果有的話
exec:執(zhí)行一條SQL語句并返回影響的行數(shù)
getAttribute:返回一個數(shù)據(jù)庫的連接屬性
lastInsertId:返回最新插入到數(shù)據(jù)庫的行(ID)
prepare:為執(zhí)行準(zhǔn)備一條SQL語句,返回語句執(zhí)行后的聯(lián)合結(jié)果集
query:執(zhí)行一條SQL語句并返回結(jié)果集
rollBack:回滾一個事務(wù)
setAttribute:設(shè)置一個數(shù)據(jù)庫連接屬性
?。?)PDOStatement類:代表一條預(yù)處理語句以及語句執(zhí)行后的聯(lián)合結(jié)果集
bindColomn:綁定一個PHP變量到結(jié)果集輸出列
bindParam:綁定一個變量到PHP預(yù)處理語句中的參數(shù)
bindValue:綁定一個值到處理語句中的參數(shù)
closeCursor:關(guān)閉游標(biāo),使語句可以再次執(zhí)行
cloumnCount:返回結(jié)果集中列的數(shù)量
errorCode:從語句中返回一個錯誤代號,如果有的話
errorInfo:從語句中返回包含錯誤信息的數(shù)組
execute:執(zhí)行一條預(yù)處理語句
fetch:從結(jié)果集中取出一行
fetchAll:從結(jié)果集中取出一個包含所有行的數(shù)組
fetchColomn:返回結(jié)果集中某一列的數(shù)據(jù)
getAttribute:返回一個PDOStatement屬性
getColomnMeta:返回結(jié)果集中某一列的結(jié)構(gòu)
nextRowset:返回下一個結(jié)果集
rowCount:返回SQL語句執(zhí)行后影響的行數(shù)
setAttribute:設(shè)置一個PDOStatement屬性
setFetchMode:為PDOStatement設(shè)定獲取數(shù)據(jù)
給一個事務(wù)處理的簡單例子:
<?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);
//開啟事務(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ù)庫支持外,還需要驅(qū)動支持(PDO和NySQLi支持)
5、PDO的效率問題
?。?)在一個大表大數(shù)據(jù)量中進(jìn)行測試,PDO的CRUD效率比MySql直連低5%~15%,并且方差大于MySQL直連
?。?)至于負(fù)載方面,PDO開啟長連接后負(fù)載高于MySQL且比較穩(wěn)定。
其實(shí)在實(shí)際應(yīng)用中,90%的程序是不會進(jìn)行數(shù)據(jù)庫遷移的,有數(shù)據(jù)庫遷移的應(yīng)用程序少之又少。
- php使用pdo連接mssql server數(shù)據(jù)庫實(shí)例
- 關(guān)于php連接mssql:pdo odbc sql server
- php使用pdo連接sqlite3的配置示例
- PHP中PDO的事務(wù)處理分析
- PHP的PDO常用類庫實(shí)例分析
- PHP的PDO操作簡單示例
- php中PDO方式實(shí)現(xiàn)數(shù)據(jù)庫的增刪改查
- php中數(shù)據(jù)庫連接方式pdo和mysqli對比分析
- PHP封裝的MSSql操作類完整實(shí)例
- PHP連接MSSQL方法匯總
- php查詢mssql出現(xiàn)亂碼的解決方法
- php基于PDO連接MSSQL示例DEMO
相關(guān)文章
php7連接MySQL實(shí)現(xiàn)簡易查詢程序的方法
這篇文章主要給大家介紹了關(guān)于php7連接MySQL實(shí)現(xiàn)簡易查詢程序的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10php檢測apache mod_rewrite模塊是否安裝的方法
這篇文章主要介紹了php檢測apache mod_rewrite模塊是否安裝的方法,通過對apache mod_rewrite模塊相關(guān)函數(shù)的檢測實(shí)現(xiàn)該檢測功能,需要的朋友可以參考下2015-03-03php 實(shí)現(xiàn)賬號不能同時登陸的方法分析【當(dāng)其它地方登陸時,當(dāng)前賬號失效】
這篇文章主要介紹了php 實(shí)現(xiàn)賬號不能同時登陸的方法,結(jié)合實(shí)例形式分析了PHP基于session實(shí)現(xiàn)當(dāng)其它地方登陸時,當(dāng)前賬號失效的相關(guān)操作技巧,需要的朋友可以參考下2020-03-03PHP數(shù)組無限分級數(shù)據(jù)的層級化處理代碼
在很多朋友寫無限級分類數(shù)據(jù)時都直接使用遞歸來操作,下面我來介紹一下關(guān)于PHP無限分級代碼優(yōu)化方法,有需要的朋友可參考一下2012-12-12PHP實(shí)現(xiàn)將瀏覽歷史頁面網(wǎng)址保存到cookie的方法
這篇文章主要介紹了PHP實(shí)現(xiàn)將瀏覽歷史頁面網(wǎng)址保存到cookie的方法,涉及php對cookie的讀取、字符串轉(zhuǎn)化及保存等技巧,需要的朋友可以參考下2015-01-01