原由 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驅動去訪問數據庫。 |
它能夠不受數據庫特定語法限制,讓數據庫平臺切換更無痛,很誘人啊有木有
初見
工欲善其事必先利其器。php5的安裝就累述了,下面說一下關於pdo的php.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會在statement和database對象上設定簡單的錯誤代號,你可使用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 |
數據查詢
咱們要查詢id爲1的數據
MYSQL版本:
PDO版本:
誒,貌似沒差多少的樣子~~
數據更新
咱們要更新id爲1的數據,name值改成ccc
MYSQL版本:
PDO版本:
感受這個exec清爽多了
刪除數據
咱們要刪除id爲1的數據
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
很高興吶
技術是死的,人是活的。利用舊技術,創造新將來。
本文參考資料:
版權全部 |