PDO抽象數(shù)據(jù)層

在進(jìn)度落后的項目中增加人手只會導(dǎo)致進(jìn)度更加落后。
----Fred Brooks

什么是PDO?

PDO全稱Php Data Object(php數(shù)據(jù)對象),他是一個支持豐富數(shù)據(jù)庫的訪問接口,也就是說,有了PDO,我們不必要使用php提供的相關(guān)函數(shù)來訪問數(shù)據(jù)庫,而是通過PDO提供的接口來訪問

PDO的特點

  • PDO是一個數(shù)據(jù)庫訪問抽象層,作用是統(tǒng)一各種數(shù)據(jù)庫的訪問接口,PDO相比其他方式來說更高效。
  • PDO通過輕巧,清晰,方便的函數(shù),統(tǒng)一數(shù)據(jù)庫操作
  • PDO吸取數(shù)據(jù)庫交互的教訓(xùn),結(jié)合Php5的新特性,來進(jìn)行方便的數(shù)據(jù)庫操作
  • PDO是模塊化的,能夠在需要的時候為用戶數(shù)據(jù)庫后端加載驅(qū)動程序,而不必重新編譯或安裝整個應(yīng)用程序

下面我們直接進(jìn)行pdo的使用(注意這里我用的新版的php,所以默認(rèn)為開啟狀態(tài),否則需要更改配置php.ini),具體的配置情況我們可以通過phpinfo()查看

鏈接數(shù)據(jù)庫

//數(shù)據(jù)庫種類
$dbms = 'mysql';
//數(shù)據(jù)庫名
$dbname = "surine";
//主機(jī)
$host = 'localhost';
//配置dsn參數(shù)(可以看到格式比較奇怪)
$dsn = "$dbms:host=$host;dbname = $dbname";
try {
   //進(jìn)行鏈接
    $pdo = new PDO($dsn, "root", "");
    echo "MySql鏈接成功";
} catch (Exception $e) {
    echo "錯誤日志".$e->getMessage();
}

這里PDO構(gòu)造是接受4個參數(shù),第4個是訪問配置選項,暫時不考慮

SQL語句

PDO中可以通過3種方法來執(zhí)行SQL語句

1.exec()

通過這個函數(shù)來執(zhí)行一些語句,來實現(xiàn)對數(shù)據(jù)庫的操作

try {
    $pdo = new PDO('mysql:host=localhost;dbname=surine', "root", "");
    echo "MySql鏈接成功";
    $aff = $pdo->exec("delete from users WHERE user = '1'");
    echo "輸出數(shù)據(jù),影響行數(shù)".$aff;
} catch (Exception $e) {
    echo "錯誤日志".$e->getMessage();
}

這里細(xì)心的讀者會發(fā)現(xiàn)我修改了連接方式,采用 直接寫語句的方式把數(shù)據(jù)庫種類,主機(jī)名稱等傳進(jìn)去,這是因為如果不這么寫可能出現(xiàn)找不到數(shù)據(jù)庫的情況,那么當(dāng)然我們的數(shù)據(jù)也就沒法操作了,如果你遇到顯示不了數(shù)據(jù)的情況,可以采用這種寫法,如果不行,可以使用

$pdo->errorInfo()

這個方法來檢查錯誤信息

再比如說,插入數(shù)據(jù)

 $aff = $pdo->exec("insert into users(user,pswd) values('mt','123456')");
2.query()

query方法返回執(zhí)行結(jié)果后的PDO結(jié)果集,那么他的參數(shù)也是一個sql語句,下面我們演示一下訪問表的例子

 $query="select * from users";//需要執(zhí)行的sql語句
 $arr = $pdo->query($query)->fetchAll();
    foreach ($arr as $var){
        echo "賬號".$var['user'];
        echo "密碼".$var['pswd']."<br>";
    }

那么我們可以看到,我們用 $pdo->query($query)查詢數(shù)據(jù),并且使用fetchAll方法,將查詢到的數(shù)據(jù)轉(zhuǎn)化格式,最后使用foreach語句進(jìn)行打印

3.prepare()和execute()

這是PDO的預(yù)處理語句里包含的方法,首先通過prepare()方法查詢準(zhǔn)備工作,通過execute來執(zhí)行查詢,下面是一個演示

  $query="select * from users";//需要執(zhí)行的sql語句
    $res=$pdo->prepare($query);//準(zhǔn)備查詢語句
    $res->execute();
    $result=$res->fetchAll(PDO::FETCH_ASSOC);
        foreach ($result as $var){
        echo "賬號".$var['user'];
        echo "密碼".$var['pswd']."<br>";
    }

這樣的打印結(jié)果和上面的一致

4.fetch() , fetchAll()

終于說到fetch這里了,在前面用到很多次fetchAll方法
fetch()方法用于獲取結(jié)果集里的下一行
那么fetchAll就是所有行,他們的返回值是一個array

這里還有一個fetchColumn()方法,是獲取某一行,那么傳入的參數(shù)就是一個int值

錯誤處理

我們使用errorcode()方法獲取錯誤碼,也可以使用errorInfo()方法獲取詳細(xì)信息,通過這些信息,我們可以得到,代碼出現(xiàn)了什么錯誤。

事務(wù)處理

事務(wù)是保證操作正確進(jìn)行的一大解決方法,那么PDO也是支持事務(wù)的。那么事務(wù)分為幾個部分。

//開啟事務(wù) 
    $pdo->beginTransaction();  
//提交事務(wù)
    $pdo->commit();  
//事務(wù)回滾
 $pdo->rollBack(); 

那么比如說我們添加一條信息到數(shù)據(jù)庫,如果添加失敗,防止其產(chǎn)生影響,那么我們可以用回滾來撤銷更改,下面是一個例子

try {
    $pdo = new PDO('mysql:host=localhost;dbname=surine', "root", "");
    echo "MySql鏈接成功";

    $pdo->beginTransaction();  //開啟事務(wù)
    $query="insert users(user,pswd)values('this','this')";//需要執(zhí)行的sql語句
    $res=$pdo->prepare($query);//準(zhǔn)備查詢語句
    $res->execute();
    if($res){
        echo "添加數(shù)據(jù)成功";
    }else{
        echo "添加數(shù)據(jù)失敗";
    }
    $pdo->commit();  //數(shù)據(jù)提交

} catch (Exception $e) {
    $pdo->rollBack();  //數(shù)據(jù)回滾
    echo "錯誤日志".$e->getMessage();
}

可以看到,我們寫了一個添加語句,然后開啟了事務(wù),在執(zhí)行語句后,提交事務(wù),如果發(fā)生問題,我們在catch里也有回滾的操作。

總結(jié)

關(guān)于PDO暫時先記錄這么多,在以后的學(xué)習(xí)中我會補(bǔ)充更多。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • pdo類PDO是一個“數(shù)據(jù)庫訪問抽象層”,作用是統(tǒng)一各種數(shù)據(jù)庫的訪問接口,與mysql和mysqli的函數(shù)庫相比,...
    桖辶殤閱讀 973評論 0 0
  • pdo基本使用 【PDO是啥】 PDO是PHP 5新加入的一個重大功能,因為在PHP 5以前的php4/php3都...
    桖辶殤閱讀 1,449評論 0 4
  • Yii提供了強(qiáng)大的數(shù)據(jù)庫編程支持。Yii數(shù)據(jù)訪問對象(DAO)建立在PHP的數(shù)據(jù)對象(PDO)extension上...
    layjoy閱讀 2,735評論 0 6
  • Php:腳本語言,網(wǎng)站建設(shè),服務(wù)器端運行 PHP定義:一種服務(wù)器端的HTML腳本/編程語言,是一種簡單的、面向?qū)ο?..
    廖馬兒閱讀 2,357評論 2 38
  • 【一】 都市的十字路口,人車匯流之地,乃是一處奇妙所在,它每天、每時、每刻都在上演著一部流動的、紀(jì)實的《都市眾生相...
    風(fēng)羽白閱讀 415評論 2 6

友情鏈接更多精彩內(nèi)容