PHP中PDO的使用方法總結

2021-08-26 17:06:59 字數 4010 閱讀 8101

本文不涉及pdo的安裝,只是簡單總結一下pdo的使用。

開始構造第乙個pdo應用,在web文件目錄下建立乙個pdo.php檔案:

<?php $dsn = "mysql:host=localhost;dbname=test"; $db = new pdo($dsn, 'root', ''); $count = $db->exec("insert into foo set name = 'lix',gender='mail',time=now()"); echo $count; $db = null; ?>$dsn = "mysql:host=localhost;dbname=test";

$db = new pdo($dsn, 'root', '');

初始化乙個pdo物件,建構函式的引數第乙個就是我們的資料來源,第二個是連線資料庫伺服器的使用者,第三個引數是密碼。

$count = $db->exec("insert into foo set name = 'lix',gender='mail',time=now()");

echo $count;

呼叫連線成功的pdo物件來執行乙個查詢,這個查詢是乙個插入一條記錄的操作,使用pdo::exec() 方法會返回乙個影響記錄的結果。最後還是需要結束物件資源:

$db = null;

預設這個不是長連線,如果需要資料庫長連線,需要最後加乙個引數:array(pdo::attr_persistent => true) 變成這樣:

$db = new pdo($dsn, 'root', '', array(pdo::attr_persistent => true));

如果想獲取資料

<?php $rs=$db->query("select * from foo"); foreach($rs->fetch() as $row) ?>也可以用

<?php $rs = $db->query("select * from foo"); while($row = $rs->fetch()) ?>一次獲取所有資料

<?php $rs = $db->query("select * from foo"); $result_arr = $rs->fetchall(); print_r($result_arr); ?>結果顯示:

array ( [0] => array ( [id] => 1 [0] => 1 [name] => heiyeluren [1] => heiyeluren [gender] => 男 [2] => 男 [time] => 2006-10-28 23:14:23 [3] => 2006-10-28 23:14:23 ) }我們看裡面的記錄,數字索引和關聯索引都有,浪費資源,我們只需要關聯索引的:

<?php $db->setattribute(pdo::attr_case, pdo::case_upper); $rs = $db->query("select * from foo"); $rs->setfetchmode(pdo::fetch_assoc); $result_arr = $rs->fetchall(); print_r($result_arr); ?>setattribute() 方法是設定pdo屬性,主要屬性有:pdo::attr_case、pdo::attr_errmode等等,我們這裡需要設定的是pdo::attr_case,就是我們使用關聯索引獲取資料集的時候,關聯索引是大寫還是小寫,有幾個選擇:

pdo::case_lower -- 強制列名是小寫

pdo::case_natural -- 列名按照原始的方式

pdo::case_upper -- 強制列名為大寫

我們使用setfetchmode方法來設定獲取結果集的返回值的型別,同樣型別還有:

pdo::fetch_assoc -- 關聯陣列形式

pdo::fetch_num -- 數字索引陣列形式

pdo::fetch_both -- 兩者陣列形式都有,這是預設的

pdo::fetch_obj -- 按照物件的形式,類似於以前的 mysql_fetch_object()

當然,一般情況下我們是使用pdo::fetch_assoc,具體使用什麼,按照你自己的需要,其他獲取型別參考手冊。

除了上面這種獲取資料的方式,還可以:

<?php $rs = $db->prepare("select * from foo"); $rs->execute(); while($row = $rs->fetch()) ?>如果你想獲取指定記錄裡乙個字段結果的話,可以使用

pdostatement::fetchcolumn():

<?php $rs = $db->query("select count(*) from foo"); $col = $rs->fetchcolumn(); echo $col; ?>小結:

查詢操作主要是pdo::query()、pdo::exec()、pdo::prepare()。pdo::query()主要是用於有記錄結果返回的操作,特別是select操作,pdo::exec()主要是針對沒有結果集合返回的操作,比如insert、update、delete等操作,它返回的結果是當前操作影響的列數。pdo::prepare()主要是預處理操作,需要通過$rs->execute()來執行預處理裡面的sql語句,這個方法可以繫結引數,功能比較強大,不是本文能夠簡單說明白的,大家可以參考手冊和其他文件。

獲取結果集操作主要是:pdostatement::fetchcolumn()、pdostatement::fetch()、pdostatement::fetchall()。pdostatement::fetchcolumn() 是獲取結果指定第一條記錄的某個字段,預設是第乙個字段。pdostatement::fetch() 是用來獲取一條記錄,pdostatement::fetchall()是獲取所有記錄集到乙個中,獲取結果可以通過pdostatement::setfetchmode來設定需要結果集合的型別。

另外有兩個周邊的操作,乙個是pdo::lastinsertid()和pdostatement::rowcount()。pdo::lastinsertid()是返回上次插入操作,主鍵列型別是自增的最後的自增id。pdostatement::rowcount()主要是用於pdo::query()和pdo::prepare()進行delete、insert、update操作影響的結果集,對pdo::exec()方法和select操作無效。

【錯誤處理】

1. 物件導向的方式

先看看如果連線錯誤等的處理,使用物件導向的方式來處理:

<?php try catch (pdoexception $e) ?>這裡利用我們php 5物件導向的異常處理特徵,如果裡面有異常的話就初始化呼叫pdoexception來初始化乙個異常類。

pdoexception異常類的屬性結構:

<?php class pdoexception extends exception ?>簡單的看一下php 5內建的異常處理類結構:

<?php class exception ?> 相應的,在**中可以合適的呼叫 getfile() 和 getline() 來進行錯誤定位,更方便的進行除錯。

2. 面向過程的方法

<? $db = new pdo('mysql:host=localhost;dbname=test', $user, $pass); $rs = $db->query("select aa,bb,cc from foo"); if ($db->errorcode() != '00000') $arr = $rs->fetchall(); print_r($arr); $db = null; ?>pdo和pdostatement物件有errorcode() 和 errorinfo() 方法,如果沒有任何錯誤, errorcode() 返回的是: 00000 ,否則就會返回一些錯誤**。errorinfo() 返回的乙個陣列,包括php定義的錯誤**和mysql的錯誤**和錯誤資訊,陣列結構如下:

array ( [0] => 42s22 [1] => 1054 [2] => unknown column 'aaa' in 'field list' )每次執行查詢以後,errorcode() 的結果都是最新的,所以我們可以很容易自己控制錯誤資訊顯示。

php中pdo的使用

執行如下 如果提示引數錯誤,說明pdo已經安裝,如果說明物件不存在,則修改php配置檔案php.ini,取消php pdo yourssqlserverhere.extis前面的注釋。test new pdo given in d wamp64 www test test.php on line 以...

PHP中PDO函式的使用

寫了個pdo函式的連線 資料庫的連線字串,包含資料庫型別,連線的庫名,連線的位址,連線的埠號,連線的字符集 dsn mysql dbname xx host 127.0.0.1 port x charset utf8 訪問資料庫的使用者名稱 user root 訪問資料庫的密碼 password 建...

php中heredoc的使用方法

svoting votes eos heredoc技術,在正規的php文件中和技術書籍中一般沒有詳細講述,只是提到了這是一種perl風格的字串輸出技術。1.以 開始標記開始,以end結束標記結束,結束標記必須頂頭寫,不能有縮排和空格,且在結束標記末尾要有分號。開始標記和開始標記相同,比如常用大寫的e...