首頁  >  文章  >  後端開發  >  php中pdo怎麼使用

php中pdo怎麼使用

小老鼠
小老鼠原創
2023-04-21 14:24:522126瀏覽

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