溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

php中的pdo如何用

發(fā)布時(shí)間:2023-04-21 16:30:44 來(lái)源:億速云 閱讀:108 作者:iii 欄目:編程語(yǔ)言

這篇文章主要講解了“php中的pdo如何用”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“php中的pdo如何用”吧!

一、 基本概念

1、 PDO:PHP Data Object的縮寫。PDO擴(kuò)展類庫(kù)為PHP定義了一個(gè)輕量級(jí)的、一致性的接口,它提供了一個(gè)數(shù)據(jù)訪問(wèn)抽象層,這樣無(wú)論使用什么數(shù)據(jù)庫(kù),都可以通過(guò)一致的函數(shù)執(zhí)行查詢和獲取數(shù)據(jù)。

PDO就是一個(gè)“數(shù)據(jù)庫(kù)訪問(wèn)抽象層”,作用是統(tǒng)一各種數(shù)據(jù)庫(kù)的訪問(wèn)接口。

2、 對(duì)任何數(shù)據(jù)庫(kù)的操作,并不是使用PDO擴(kuò)展本身執(zhí)行的,必須針對(duì)不同的數(shù)據(jù)庫(kù)服務(wù)器使用特定的PDO驅(qū)動(dòng)程序訪問(wèn)。如:MYSQL(PDO_MYSQL)??梢栽趐hpinfo()函數(shù)中查看PDO部分的列表。

二、PDO的安裝

1、Linux:安裝PHP時(shí),向configure命令中添加如下標(biāo)志:

–with-pdo-mysql=/usr/local/mysql //其中/usr/local/mysql為mysql安裝目錄

2、Windows:

在C:windows下找到php.ini文件

(1)打開:extension=php_pdo.dll

(2)打開:extension=php_pdo_mysql.dll

三、使用PDO過(guò)程

1、連接數(shù)據(jù)庫(kù)

(1)創(chuàng)建PDO對(duì)象

(2)設(shè)置PDO行為屬性(setattribute())

(3)設(shè)置字符集($link->query(‘set names UTF8’))

2、發(fā)送SQL語(yǔ)句

(1)準(zhǔn)備SQL語(yǔ)句

(2)執(zhí)行發(fā)送

3、查看結(jié)果

四、連接數(shù)據(jù)庫(kù)

1、創(chuàng)建PDO對(duì)象:

(1)$link = new PDO(DSN, 用戶名, 密碼, 驅(qū)動(dòng)屬性);

1)DSN:數(shù)據(jù)源名,用來(lái)定義一個(gè)必須用到的驅(qū)動(dòng)程序和要使用的數(shù)據(jù)庫(kù)。mysql的DSN格式:’mysql:host=localhost;dbname=lamp30’

2)可以將DSN放到文件里,如:’uri:file:///usr/local/dsn.txt’

3)創(chuàng)建對(duì)象時(shí)要使用try…catch語(yǔ)句,因?yàn)樵诼暶鱌DO實(shí)例發(fā)生錯(cuò)誤時(shí),會(huì)自動(dòng)拋出一個(gè)異常。如:

代碼如下

try{
$link = new PDO(‘mysql:host=localhost;dbname=lamp30’,’root’,’111111’);
}catch(PDOException $e){
echo $e->getMessage();
exit(‘連接數(shù)據(jù)庫(kù)錯(cuò)誤.’);
}

2、驅(qū)動(dòng)屬性

(1)可以將必要的幾個(gè)選項(xiàng)組成數(shù)組(屬性名作為元素鍵,屬性值作為元素值)傳遞給構(gòu)造方法的第四個(gè)參數(shù)。如果沒(méi)有在構(gòu)造方法中定義驅(qū)動(dòng)屬性,可以在之后使用PDO類的setattribute()函數(shù)定義各個(gè)屬性。

(2)書P501頁(yè)有這些屬性中文釋義。

3、設(shè)置字符集:$link->query(‘set names UTF8’)

五、發(fā)送SQL語(yǔ)句

(1)$link->exec():執(zhí)行增刪改,返回受影響行數(shù),執(zhí)行失敗返回false或0。

(2)$link->query():執(zhí)行查詢,返回PDOStatement結(jié)果集對(duì)象。

六、查詢結(jié)果

1、非查詢:

(1)直接用$link->exec()的返回影響行數(shù)

(2)$link->lastInsertId()返回最后一條INSERT命令生成的AUTO_INCREMENT編號(hào)值

2、見預(yù)處理

七、預(yù)處理

1、第二步:發(fā)送SQL語(yǔ)句

代碼如下

$stmt = $link->prepare(‘select * from user where id=:id’);
$stmt->bindparam(‘:id’, $id, PDO::PARAM_INT);
$id = 2;
$stmt->execute();

bindParam()參數(shù)有以下7種:可以不用寫

PDO::PARAM_INT

PDO::PARAM_STR

PDO::PARAM_BOOL

PDO::PARAM_NULL

PDO::PARAM_LOB:大對(duì)象數(shù)據(jù)類型

PDO::PARAM_STMT:PDOstatement類型

PDO::PARAM_INPUT_OUTPUT:存儲(chǔ)過(guò)程使用的數(shù)據(jù)類型

2、第三步:

如:

代碼如下

$stmt = $link->query(‘select * from user’);

(1)fetch()方法

$pdoStat ->bindColumn(1, $id); //第一個(gè)參數(shù)可以是從1開始的索引值
$pdoStat ->bindColumn(‘name’, $name); //也可以是列名
$pdoStat ->bindColumn(‘pass’, $pass);
while($row = $stmt ->fetch(PDO::FETCH_BOUND)){
echo $id.’ ’;
echo $name.’ ’;
echo $pass.’
’;
}

fetch()參數(shù)有六種:見手冊(cè)。

可以用setFetchMode()方法設(shè)置默認(rèn)模式。

(2)fetchall()方法

代碼如下

$result = $stmt ->fetchall();
foreach($result as $row){
echo $row[‘id’].’ ’;
echo $row[‘name’].’ ’;
echo $row[‘pass’].’
’;
}

Fetchall()參數(shù)與fetch()相同。

八、事務(wù)處理

1、關(guān)閉自動(dòng)提交(在驅(qū)動(dòng)屬性中修改)

2、打開事務(wù)

3、提交事務(wù)/回滾

4、打開自動(dòng)提交

如:

代碼如下

$link = new PDO(‘mysql:host=localhost;dbname=lamp30’);
//1
$link->setattribute(PDO::ATTR_AUTOCOMMIT, false);
//2
$link->begintransaction();
$result = $link->exec(‘insert into user(name,paa) values(‘wsy’,’111’)’);
//3
if($result){
$link->commit();
}else{
$link->rollback();
}
//4
$link->setattribute(PDO::ATTR_AUTOCOMMIT, true);

九、PDO對(duì)象中的成員方法

1、$link->getattribute(屬性名):獲取一個(gè)驅(qū)動(dòng)屬性。

2、$link->setattribute(屬性名,屬性值):設(shè)置一個(gè)驅(qū)動(dòng)屬性。

1)因oracle把空字符串返回為NULL值,而其它數(shù)據(jù)庫(kù)無(wú)此特性,為了有更好的兼容性$link->setattribute(PDO::ATTR_ORACLE_NULLS ,PDO::NULL_EMPTY_STRING,);

2)有三種顯示錯(cuò)誤的方式:靜態(tài)、WARNING消息、異常

3、$link->errorcode():獲取錯(cuò)誤碼。

1)如setattribute函數(shù)設(shè)置顯示錯(cuò)誤方式為靜態(tài),則出現(xiàn)錯(cuò)誤時(shí)什么都不顯示,必須調(diào)用此函數(shù),才能查看錯(cuò)誤號(hào)。

4、$link->errorinfo():獲取錯(cuò)誤信息(數(shù)組)。

1)如setattribute函數(shù)設(shè)置顯示錯(cuò)誤方式為靜態(tài),則出現(xiàn)錯(cuò)誤時(shí)什么都不顯示,必須調(diào)用此函數(shù),才能查看錯(cuò)信息。

5、$link->lastinsertid():獲取插入到表中的最后一條數(shù)據(jù)主鍵值(如有多條數(shù)據(jù)同時(shí)插入,返回第一個(gè)插入行的ID)。

6、$link->prepare():發(fā)送準(zhǔn)備的SQL語(yǔ)句,返回PDOStatement對(duì)象。

7、$link->begintransaction():打開事務(wù)。

8、$link->commit():提交一個(gè)事務(wù),執(zhí)行一個(gè)SQL。

9、$link->rollback():回滾一個(gè)事務(wù)。

十、錯(cuò)誤模式

1、靜態(tài)模式:

代碼如下

$link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT)

(1) 默認(rèn)模式,在錯(cuò)誤發(fā)生時(shí)不進(jìn)行任何操作,PDO將只設(shè)置錯(cuò)誤代碼。

(2) 查看錯(cuò)誤可以調(diào)用errorCode()和errorInfo(),PDO和PDOStatement類都有這兩個(gè)方法。

2、警告模式:

代碼如下

$link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING)

(1)此模式在設(shè)置錯(cuò)誤代碼以外,PDO還將發(fā)出一條PHP傳統(tǒng)的E_WARNING消息。

(2)這是mysql和mysqli顯示錯(cuò)的方式。

3、異常模式:

代碼如下

$link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION)

(1) 此模式在設(shè)置錯(cuò)誤代碼以外,PDO還將拋出一個(gè)PDOException,并設(shè)置其屬性,以反映錯(cuò)誤代碼和錯(cuò)誤信息。

(2) 如果異常導(dǎo)致腳本終止,則事務(wù)將自動(dòng)回滾。

(3) PDO推薦使用此模式。

十一、持久連接

代碼如下

$link->setAttribute(PDO::ATTR_PERSISTENT, true);

持久連接即當(dāng)腳本執(zhí)行結(jié)束時(shí)不會(huì)自動(dòng)斷開連接,而且用$link->close()不能關(guān)閉連接。

感謝各位的閱讀,以上就是“php中的pdo如何用”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)php中的pdo如何用這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI