結緣PDO,結緣網
起因
一直沒有注意看資料庫相關知識
幾個月之前,無意開啟如下一段代碼:
被人吐槽是N年前的寫法。後來也是學習需要,單一mysql已經不合適了。於是上網搜了一下好方法,PDO迎面而來。
誘惑
上網瀏覽時,看見了一段話:
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. 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語句,或者模仿這些功能。你需要使用一個成熟的提取層,如果你需要的話。 |
它可以不受資料庫特定文法限制,讓資料庫平台切換更無痛,很誘人啊有木有
初見
工欲善其事必先利其器。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為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
很高興呐
技術是死的,人是活的。利用舊技術,創造新未來。
http://www.bkjia.com/PHPjc/923412.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/923412.htmlTechArticle結緣PDO,結緣網 起因 一直沒有注意看資料庫相關知識 幾個月之前,無意開啟如下一段代碼: 被人吐槽是N年前的寫法。後來也是學習需要...