php中pdo是一個擴充類別庫,可以為php定義一個輕量級、一致性的接口,其使用方法如:1、建立一個php範例檔;2、透過「try{$link = new PDO(.);}catch(PDOException $e){...}”方式建立pdo物件;3、透過「$link->query('select *from user');」方式執行查詢,傳回結果集對象即可。
本作業系統環境: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();
PDO::PARAM_INTPDO::PARAM_STRPDO::PARAM_BOOLPDO::PARAM_NULL#PDO::PARAM_LOB:大對象資料類型PDO::PARAM_STMT:PDOstatement類型PDO::PARAM_INPUT_OUTPUT:預存程序使用的資料類型2、第三步:如:程式碼如下
$stmt = $link->query(‘select * from user’);
$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.’ ’; }
$result = $stmt ->fetchall(); foreach($result as $row){ echo $row[‘id’].’ ’; echo $row[‘name’].’ ’; echo $row[‘pass’].’ ’; }
八、交易處理
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中文網其他相關文章!