PDO使用簡介

2021-04-19 23:54:11 字數 4961 閱讀 2636

出處:http://www.phpchina.cn/bbs/viewthread.php?tid=1574&fpage=1&highlight=%2bmzt

php 5.1 發布時附帶乙個全新的

資料庫連線層,即 php data objects (

pdo)。它與adodb和pear db等

資料庫抽象層不同,它提供的是如何訪問資料庫和處理查詢結果,效率也更高,還可以通過預處理語句來防止sql注入。

目前支援的資料庫有:

1.        連線資料庫

通常我們連線資料庫使用的是不同的連線函式(如:mysql_connect,pg_connect),pdo提供了統一的介面:pdo物件。

<?php

$db = new pdo(

"pgsql:dbname=pdo;host=localhost",   

"postgres8",     

"postgres8" );

echo "successfully created a pdo object";

?>

就像你看到的,pdo有三個引數,

• 連線字串

pgsql 是使用的pdo驅動,可以為:mysql, mssql, sybase, dblib, firebird, oci, odbc, pgsql, sqlite, sqlite2;

dbname 是資料庫名稱,這裡假設有乙個名為pdo的測試資料庫;

host 是指要連線到**,如果是本地則為localhost。

• 使用者名稱

• 密碼

做這一步之前,請先確認已經載入了pdo模組。如果我們試圖處理乙個無效的連線字串:

<?php

$db = new pdo(

"this_is_not_a_pdo_module:dbname=pdo;host=localhost",   

"foo",     

"bar" );

echo "successfully created a pdo object";

?>

php將會返回以下錯誤:

fatal error: uncaught exception 'pdoexception' with message 'could not find driver'

所以,我們可以用一種優雅的方式來處理,即丟擲pdo異常來處理錯誤(但並不是所有情況都是)。

<?php

try

catch( pdoexception $e )

echo "successfully created a pdo object";

?>

我們會得到

could not find driver 或

sqlstate[hy000] [7] fatal: database "pdo2" does not exist

如果資料庫不存在(不同的錯誤會返回不同的提示資訊)。

2.        設定屬性

1)        pdo有三種錯誤處理方式:

• pdo::errmode_silent不顯示錯誤資訊,只設定錯誤碼

• pdo::errmode_warning顯示警告錯

• pdo::errmode_exception丟擲異常

可通過以下語句來設定錯誤處理方式為丟擲異常

$db->setattribute(pdo::attr_errmode, pdo::errmode_exception );

當設定為pdo::errmode_silent時可以通過呼叫errorcode() 或errorinfo()來獲得錯誤資訊,當然其他情況下也可以。

2)        因為不同資料庫對返回的欄位名稱大小寫處理不同,所以pdo提供了pdo::attr_case設定項(包括pdo::case_lower,pdo::case_natural,pdo::case_upper),來確定返回的欄位名稱的大小寫。

3)        通過設定pdo::attr_oracle_nulls

型別(包括pdo::null_natural,pdo::null_empty_string,pdo::null_to_string)來指定資料庫返回的null值在php中對應的數值。

3.        查詢

為了說明清楚,我們這裡定義了乙個

rss feeds表

id     integer

name   character varying(100)

url    varharacter varying(255)

feed   character varying(255)        

不使用預處理語句的方式:

<?php

foreach( $db->query( "select * from feeds" ) as $row )

?>

得到以下結果:

(只顯示已行為了節省空間)

使用預處理語句的方式:

<?php

$stmt = $db->prepare( "select * from feeds" );

$stmt->execute();

print_r( $stmt->fetch() );

?>

這裡,$stmt是乙個pdostatement物件,預處理之後會得到這樣乙個物件,必須execute後才起作用。fetch函式只提取了一行資料,如果需要讀取全部資料,可換成fetchall函式。

繫結資料

這裡,bindparam將$url

變數繫結到了:url域,執行時會自動將改變量載入。

插入資料

實現插入資料也可以像繫結資料一樣來quote資料,這裡給出通過在execute中給定輸入引數來自動quote的方法。

事務處理

$dbh->begintransaction();

try catch (exception $e)

如果資料庫支援事務處理,呼叫begintransaction的同時將資料庫設定為非自動提交,commit或rollback返回自動提交狀態。

4.        儲存過程

$stmt = $dbh->prepare("call sp_set_string(?)");

$stmt->bindparam(1, $str);

$str = 『foo』;

$stmt->execute();

於先前的例子差不多,只是這裡使用了「?」資料繫結方法,sp_set_string是儲存過程名稱。

帶有輸出引數的儲存過程

$stmt = $dbh->prepare("call sp_get_string(?)");

$stmt->bindparam(1, $ret,pdo::param_str, 4000);

if ($stmt->execute())

繫結列輸出

$stmt = $dbh->prepare("select extension, name from credits");

if ($stmt->execute()) }

PDO 簡介 介紹和安裝

自 介紹 pdo擴充套件為php訪問資料庫定義了乙個輕量級的 一致性的介面,它提供了乙個資料訪問抽象層,這樣,無論你使用什麼資料庫,你都可以通過一致的函式執行查詢和獲取資料。注意,你並不能使用pdo擴充套件本身執行任何資料庫操作,你必須使用乙個database specific pdo driver...

PDO初步使用

如何檢視是否開啟 第一種 通過引數形式來連線資料庫 trycatch pdoexception err 第二種 通過uri連線資料庫 trycatch pdoexception err 第三種 通過配置檔案來連線資料庫 trycatch pdoexception err 推薦使用第一種,比較好用 方...

PDO 簡介 PDO中的三個類及其方法

一 pdo 代表乙個php和資料庫之間的連線。方法 pdo 構造器,構建乙個新的pdo物件 begintransaction 開始事務 commit 提交事務 errorcode 從資料庫返回乙個錯誤代號,如果有的話 errorinfo 從資料庫返回乙個含有錯誤資訊的陣列,如果有的話 exec 執行...