結緣PDO

原由 php

一直沒有注意看數據庫相關知識 html

幾個月以前,無心打開以下一段代碼: mysql

被人吐槽是N年前的寫法。後來也是學習須要,單一mysql已經不合適了。因而上網搜了一下好方法,PDO迎面而來。 sql

誘惑 數據庫

上網瀏覽時,看見了一段話: less

The PHP Data Objects (PDO) extension defines a lightweight, consistent interface for accessing databases in PHP. Each database driver that implements the PDO interface can expose database-specific features as regular extension functions. Note that you cannot perform any database functions using the PDO extension by itself; you must use a database-specific PDO driver to access a database server. ide

PDO provides a data-access abstraction layer, which means that, regardless of which database you're using, you use the same functions to issue queries and fetch data. PDO does not provide a database abstraction; it doesn't rewrite SQL or emulate missing features. You should use a full-blown abstraction layer if you need that facility.  函數

給出網友的翻譯: 學習

PDO擴展爲PHP定義了一個訪問數據庫的輕量的,持久的接口。實現了PDO接口的每一種數據庫驅動都能以正則擴展的形式把他們各自的特點表現出來。注意;利用PDO擴展自己並不能實現任何數據庫函數。你必須使用一個特定的數據庫PDO驅動去訪問數據庫。
PDO提供了一個數據訪問抽象層,這就意味着,無論你使用的是哪一種數據庫,你均可以用一樣的函數去進行查詢的獲取數據。PDO並不提供數據提取,它不會重寫SQL語句,或者模仿這些功能。你須要使用一個成熟的提取層,若是你須要的話。
fetch

它能夠不受數據庫特定語法限制,讓數據庫平臺切換更無痛,很誘人啊有木有


初見

工欲善其事必先利其器。php5的安裝就累述了,下面說一下關於pdophp.ini的配置

首先,你須要知道:

php.ini裏面,分號表示註釋,去掉前面的分號就表明該功能能夠用

Ok,如今打開php.ini(能夠用記事本打開)

在文件裏,找到如下行

extension=php_pdo.dll

extension=php_pdo_firebird.dll

extension=php_pdo_informix.dll

extension=php_pdo_mssql.dll

extension=php_pdo_mysql.dll

extension=php_pdo_oci.dll

extension=php_pdo_oci8.dll

extension=php_pdo_odbc.dll

extension=php_pdo_pgsql.dll

extension=php_pdo_sqlite.dll

把前面的分號去掉(我這裏已經去掉)就能夠了。

在配置php.ini到時候要當心,修改前先備份。我曾經改錯一次,使得php沒法工做,還愣是不知道哪裏有問題。。

這樣子,pdo就安裝完畢了

把玩

第一件事固然是想看看怎麼鏈接數據庫啦

它有一個PDO類,說是建立一個新的pdo對象,應該是這個了

看看語法,第一個語句出來啦~\(≧▽≦)/~

在裏面,mysql就是數據庫類型,localost是主機名,test是數據庫名,dbuser是用戶名,dbpass是密碼

請注意try/catch代碼塊,你應該始終將您 PDO 的操做封裝在一個 try/catch 代碼塊內並使用異常機制

下面有一個網友的語句圖,把個人集合成一句話

 

下面是錯誤處理

PDO 提供了3中不一樣的錯誤處理策略。

PDO::ERRMODE_SILENT

這是默認使用的模式。PDO會在statementdatabase對象上設定簡單的錯誤代號,你可使用PDO->errorCode() PDO->errorInfo() 方法檢查錯誤;若是錯誤是在對statement對象進行調用時致使的,你就能夠在那個對象上使用 PDOStatement->errorCode() PDOStatement->errorInfo() 方法取得錯誤信息。而若是錯誤是在對database對象調用時致使的,你就應該在這個database對象上調用那兩個方法。

 

PDO::ERRMODE_WARNING

做爲設置錯誤代號的附加,PDO將會發出一個傳統的E_WARNING信息。這種設置在除錯和調試時是頗有用的,若是你只是想看看發生了什麼問題而不想中斷程序的流程的話。

PDO::ERRMODE_EXCEPTION

爲設置錯誤代號的附件,PDO會拋出一個PDOException異常並設置它的屬性來反映錯誤代號和錯誤信息。這中設置在除錯時也是頗有用的,由於他會有效的"放大(blow up)"腳本中的出錯點,很是快速的指向一個你代碼中可能出錯區域。(記住:若是異常致使腳本中斷,事務處理回自動回滾。)

異常模式也是很是有用的,由於你可使用比之前那種使用傳統的PHP風格的錯誤處理結構更清晰的結構處理錯誤,比使用安靜模式使用更少的代碼及嵌套,也可以更加明確地檢查每一個數據庫訪問的返回值。

回到上面的代碼,若是發生了錯誤,一個PDOException異常對象將被拋出,而後catch會捕捉到,而後按照開發者設定的內容進一步處理。

鏈接就玩到這裏。。

進擊

鏈接以後該幹什麼了呢?沒錯,處理數據,要不數據庫幹嗎用的。下面全部將給出兩個版本:

 

假設有個表zjyz

id

name

1

aaa

2

bbb

 

數據查詢

咱們要查詢id1的數據

MYSQL版本:

 

PDO版本:

 

誒,貌似沒差多少的樣子~~

 

數據更新

咱們要更新id1的數據,name值改成ccc

MYSQL版本:

 

PDO版本:

感受這個exec清爽多了

 

刪除數據

咱們要刪除id1的數據

MYSQL版本:

 

PDO版本:

呵呵,仍是exec返回行數

 

插入數據

咱們要插入數據 id = 3 name = ccc

MYSQL版本:

 

PDO版本:

 

好玩的exec()

上面出現了不少次這個函數,如今簡單介紹一下

PDO::exec() 在一個單獨的函數調用中執行一條 SQL 語句,返回受此語句影響的行數。

PDO::exec() 不會從一條 SELECT 語句中返回結果。對於在程序中只須要發出一次的 SELECT 語句,能夠考慮使用 PDO::query()。對於須要發出屢次的語句,可用 PDO::prepare() 來準備一個 PDOStatement 對象並用 PDOStatement::execute() 發出語句。

 

總結

雖然這個技術有點老了,可是相對於陳舊的語句,依然活力四射。隨着學習的深刻,樓樓還學到了不少本文沒提到的東西。謝謝各位大神啦~\(≧▽≦)/~

這些等等不少。。。全部涉及數據庫的操做也基本換成了PDO

很高興吶

技術是死的,人是活的。利用舊技術,創造新將來。

本文參考資料:

  1. 爲何你應該使用PHP PDO訪問數據庫
    http://www.360doc.com/content/10/0927/10/2646631_56718095.shtml
  2. PHP5PDO的簡單使用

    http://www.cnblogs.com/xiaochaohuashengmi/archive/2010/08/12/1797753.html

  3. PDO::exec

    http://php.net/manual/zh/pdo.exec.php

 

版權全部

相關文章
相關標籤/搜索