PDO的誕生是為了解決不同數(shù)據(jù)庫(kù)需要不同的PHP類庫(kù):
成都創(chuàng)新互聯(lián)2013年開(kāi)創(chuàng)至今,先為梅縣等服務(wù)建站,梅縣等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為梅縣企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
如此,一個(gè)'類庫(kù)'就能搞定
優(yōu)點(diǎn):
1,編碼一致性,2,高適應(yīng)性,3,面向?qū)ο?4,高性能(PDO由c編譯)
開(kāi)啟支持:(PHP5.1+默認(rèn)開(kāi)啟)
linux下編譯時(shí)追加參數(shù): --with-pdo-MySQL
windows下修改PHP.ini 開(kāi)啟或追加
extension=php_pdo.dll
extension=php_pdo_mysql.dll
查看當(dāng)前環(huán)境支持的PDO驅(qū)動(dòng):
1,
phpinfo();
2,
print_r(pdo_drivers());
連接并選擇數(shù)據(jù)庫(kù)(3種方法):
mysql:數(shù)據(jù)庫(kù)名;
dbuser:用戶名;
pswd:密碼;
1,直接用構(gòu)造函數(shù)傳參
$dbh = new PDO('mysql:host=localhost;dbname=mysql', 'dbuser', 'pswd');
2,將連接參數(shù)保存到dsn文件
$dbh = new PDO('uri:file://usr/local/mysql.dsn');
3,寫到php.ini中,連接別名:mysqlpdo
[PDO]
pdo.dsn.mysqlpdo = 'mysql:dbname=mysql;host=localhost'
$dbh = new PDO('mysqlpdo', 'dbuser', 'pswd');
PDO __construct 原型:
PDO PDO::__construct(string DSN [, string username [, string password[, array driver_opts]]])
第四個(gè)參數(shù)主要是一些可選的配置(數(shù)組形式傳參):
常用如下:
1,PDO::ATTR_AUTOCOMMIT //是否自動(dòng)提交事務(wù)
2,PDO::ATTR_CASE //查詢返回的字段名大小寫 可用: PDO::CASE_UPPER,PDO::CASE_LOWER,PDO::CASE_NATURAL(原樣)
3,PDO::ATTR_EMULATE_PREPARES //開(kāi)啟Mysql查詢緩存
4,PDO::ATTR_ERRMODEPDO //錯(cuò)誤類型 可用: PDO::ERRMODE_EXCEPTION(報(bào)異常), PDO::ERRMODE_SILENT(默認(rèn),不會(huì)顯示任何錯(cuò)誤),PDO::ERRMODE_WARNING(報(bào)PHP E_WARNING).
5,PDO::ATTR_ORACLE_NULLS //默認(rèn)為FALSE 當(dāng)設(shè)置為TRUE時(shí) '空' 轉(zhuǎn)化為 NULL
6,PDO::ATTR_PERSISTENT //持久連接 默認(rèn)為FALSE
7,PDO::ATTR_PREFETCH //'預(yù)取' 當(dāng)你的查詢一次只需一行結(jié)果,這個(gè)開(kāi)啟后,會(huì)得到多行,減少查詢次數(shù)
8,PDO::ATTR_TIMEOUT //查詢超時(shí) Mysql暫不支持
9,PDO::DEFAULT_FETCH_MODE //數(shù)據(jù)取回模式 關(guān)聯(lián)數(shù)組/索引數(shù)組/對(duì)象
設(shè)置與獲得參數(shù):
$dbh->getAttribute($attribute); $dbh->setAttribute($attribute,$value);
例:
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
處理連接錯(cuò)誤:
try { $dbh = new PDO('mysql:host=localhost;dbname=mysql', 'dbuser', 'pswd'); } catch (PDOException $exception) { echo "Connection error: " . $exception->getMessage(); }
獲取錯(cuò)誤信息:
int PDOStatement::errorCode() array PDOStatement::errorInfo() //0=>sqlstate , 1=>驅(qū)動(dòng) error code ,2=>驅(qū)動(dòng) error message
執(zhí)行SQL:
$dbh->exec(); //update insert delete 無(wú)結(jié)果集 $dbh->query(); //單次select 有結(jié)果集; 多次請(qǐng)用prepare function getFruit($dbh) { $sql = 'SELECT name, color, calories FROM fruit ORDER BY name'; foreach ($dbh->query($sql) as $row) { print $row['name'] . "\t"; print $row['color'] . "\t"; print $row['calories'] . "\n"; } }
返回受上一個(gè) SQL 語(yǔ)句影響的行數(shù):
int PDOStatement::rowCount ( void )
時(shí)間有限,稍后再學(xué)習(xí)多次查詢用到的prepare
感謝各位糾錯(cuò),指正