首頁 後端開發 PHP問題 php中pdo怎麼使用

php中pdo怎麼使用

Apr 21, 2023 pm 02:24 PM
php pdo用法

php中pdo是一個擴充類別庫,可以為php定義一個輕量級、一致性的接口,其使用方法如:1、建立一個php範例檔;2、透過「try{$link = new PDO(.);}catch(PDOException $e){...}”方式建立pdo物件;3、透過「$link->query('select *from user');」方式執行查詢,傳回結果集對象即可。

php中pdo怎麼使用

本作業系統環境:Linux5.18.14系統、Dell G3電腦。

一、 基本概念

1、 PDO:PHP Data Object的縮寫。 PDO擴充類別庫為PHP定義了一個輕量級的、一致性的接口,它提供了一個資料存取抽象層,這樣無論使用什麼資料庫,都可以透過一致的函數執行查詢和取得資料。

PDO就是一個“資料庫存取抽象層”,作用是統一各種資料庫的存取介面。

2、 對任何資料庫的操作,並不是使用PDO擴充本身執行的,必須針對不同的資料庫伺服器使用特定的PDO驅動程式存取。如:MYSQL(PDO_MYSQL)。可以在phpinfo()函數中查看PDO部分的清單。

二、PDO的安裝

1、Linux:安裝PHP時,在configure指令中加入以下標誌:

–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程序

#1、連接資料庫

2、建立PDO物件:

(1)$link = new PDO(DSN, 使用者名稱, 密碼, 驅動屬性);

# 1)DSN:資料來源名,用來定義一個必須用到的驅動程式和要使用的資料庫。 mysql的DSN格式:'mysql:host=localhost;dbname=lamp30'

2)可以將DSN放到檔案裡,如:'uri:file:///usr/local/dsn.txt'

3)建立物件時要使用try…catch語句,因為在宣告PDO實例發生錯誤時,會自動拋出一個例外。如:

程式碼如下

try{
$link = new PDO(‘mysql:host=localhost;dbname=lamp30’,’root’,’111111’);
}catch(PDOException $e){
echo $e->getMessage();
exit(‘连接数据库错误.’);
}
登入後複製

3、驅動屬性

(1)可以將必要的幾個選項組成陣列(屬性名稱作為元素鍵,屬性值作為元素值)傳遞給建構方法的第四個參數。如果沒有在建構方法中定義驅動屬性,可以在之後使用PDO類別的setattribute()函數定義各個屬性。

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

3、設定字元集:$link->query('set names UTF8')

五、傳送SQL語句

##(1 )$link->exec():執行增刪改,傳回受影響行數,執行失敗回傳false或0。

(2)$link->query():執行查詢,傳回PDOStatement結果集物件。

六、查詢結果

1、非查詢:

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

(2)$link->lastInsertId()傳回最後一條INSERT指令產生的AUTO_INCREMENT編號值

2、見預處理

#七、預處理

1、第二步:發送SQL語句

程式碼如下

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

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

PDO::PARAM_INT

PDO::PARAM_STR

PDO::PARAM_BOOL

PDO::PARAM_NULL

#PDO::PARAM_LOB:大對象資料類型

PDO::PARAM_STMT:PDOstatement類型

PDO::PARAM_INPUT_OUTPUT:預存程序使用的資料類型

2、第三步:

如:

程式碼如下

$stmt = $link->query(‘select * from user’);
登入後複製

(1)fetch()方法


$pdoStat ->bindColumn(1, $id); //第一个参数可以是从1开始的索引值
$pdoStat ->bindColumn(‘name’, $name); //也可以是列名
$pdoStat ->bindColumn(‘pass’, $pass);
while($row = $stmt ->fetch(PDO::FETCH_BOUND)){
echo $id.’ ’;
echo $name.’ ’;
echo $pass.’
’;
}
登入後複製

fetch()參數有六種:請參閱手冊。

可以用setFetchMode()方法設定預設模式。

(2)fetchall()方法

程式碼如下

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

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

八、交易處理

1、關閉自動提交(在驅動屬性中修改)

#2、開啟交易

# 3.提交交易/回滾

4、開啟自動提交

如:

程式碼如下

$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物件中的成員方法

1、$link->getattribute(屬性名稱):取得一個驅動屬性。

2、$link->setattribute(屬性名,屬性值):設定一個驅動屬性。

1)因oracle把空字串回傳為NULL值,而其它資料庫無此特性,為了有更好的相容性$link->setattribute(PDO::ATTR_ORACLE_NULLS ,PDO::NULL_EMPTY_STRING, );

2)有三種顯示錯誤的方式:靜態、WARNING訊息、例外

#3、$link->errorcode():取得錯誤碼。

1)如setattribute函數設定顯示錯誤方式為靜態,出現錯誤時什麼都不顯示,必須呼叫此函數,才能查看錯誤號碼。

4、$link->errorinfo():取得錯誤訊息(陣列)。

1)如setattribute函數設定顯示錯誤方式為靜態,出現錯誤時什麼都不顯示,必須呼叫此函數,才能查看錯誤訊息。

5、$link->lastinsertid():取得插入到表中的最後一個資料主鍵值(如有多條資料同時插入,傳回第一個插入行的ID)。

6、$link->prepare():发送准备的SQL语句,返回PDOStatement对象。

7、$link->begintransaction():打开事务。

8、$link->commit():提交一个事务,执行一个SQL。

9、$link->rollback():回滚一个事务。

十、错误模式

1、静态模式:

代码如下

$link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT)
登入後複製

(1) 默认模式,在错误发生时不进行任何操作,PDO将只设置错误代码。

(2) 查看错误可以调用errorCode()和errorInfo(),PDO和PDOStatement类都有这两个方法。

2、警告模式:

代码如下

$link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING)
登入後複製

(1)此模式在设置错误代码以外,PDO还将发出一条PHP传统的E_WARNING消息。

(2)这是mysql和mysqli显示错的方式。

3、异常模式:

代码如下

$link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION)
登入後複製

(1) 此模式在设置错误代码以外,PDO还将抛出一个PDOException,并设置其属性,以反映错误代码和错误信息。

(2) 如果异常导致脚本终止,则事务将自动回滚。

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

十一、持久连接

代码如下

$link->setAttribute(PDO::ATTR_PERSISTENT, true);
登入後複製

持久连接即当脚本执行结束时不会自动断开连接,而且用$link->close()不能关闭连接。

以上是php中pdo怎麼使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1670
14
CakePHP 教程
1428
52
Laravel 教程
1329
25
PHP教程
1274
29
C# 教程
1256
24