在上在篇教程中,請為大家介紹如何透過PHP 內建的Mysqli 擴充與MySQL 資料庫交互,今天我們來看看另一個PHP 內建的資料庫擴充功能- PDO,其全名為PHP Data Objects,即PHP 資料物件。
PDO 簡介與安裝
PDO 為PHP 存取資料庫定義了一個輕量級的一致接口,因此它提供的是一個資料存取抽象層,本身並不能實現任何資料庫交互功能,必須使用一個特定資料庫的PDO 驅動來存取資料庫服務,這些特定資料庫驅動包括MySQL、PostgreSQL、SQLite、SQL Server、Oracle 等,因此PDO 是一個更標準、更通用的資料庫擴展,而且完全是物件導向風格的,目前,在各個主流PHP 框架中,PDO 已經成為了建構資料庫互動的基礎元件,包括Laravel 框架,也是基於PDO 擴充功能提供資料庫存取功能。
我們先前推薦的PHP 本機整合開發環境都整合了對PDO 擴充功能的支援(以下是Laragon 預先安裝的PHP 擴充功能):
且可以看到,除了PDO
擴充功能外,還有一個與之匹配的具體資料庫擴充pdo_mysql
,有了這個具體擴展,才能存取MySQL 資料庫。另外,PDO 提供了統一的資料庫存取接口,所以實現了PDO 接口的具體資料庫擴展可以透過完全一樣的方法存取資料庫,這樣一來,如果應用需要切換資料庫,就不需要對資料庫操作碼進行重構,光憑這一點,就可以丟掉MySQLi 擴展,投入PDO 的懷抱了。
如果安裝過Laradock,可以啟動workspace
容器,然後查看其預先安裝的PHP 擴展,可以看到,它包含更多具體的PDO 資料庫驅動支援:
其中pdo_pgsql
表示PostgresSQL 資料庫驅動,pdo_sqlite
表示SQLite 資料庫驅動。
建立資料庫連線與基本查詢
在我們的教學課程中,還是選擇以 MySQL 為例進行示範。
要透過PDO 擴充功能建立資料庫連接,直接實例化PDO 物件即可,我們寫一段簡單的範例程式碼如下(在php_learning/mysql
目錄下新建pdo.php
儲存程式碼):
<?php // 设置连接属性 $dsn = 'mysql:host=127.0.0.1;port=3306;dbname=test;charset=utf8mb4'; $user = 'root'; $pass = 'root'; try { // 建立连接 $pdo = new PDO($dsn, $user, $pass); // 执行 SQL 查询 $sql = $pdo->quote('SELECT * FROM `post` ORDER BY `id` DESC'); $res = $pdo->query($sql); // 打印查询结果 echo '<pre class="brush:php;toolbar:false">'; foreach ($res as $row) { print_r($row); } } catch (PDOException $exception) { // 如果数据库操作出现异常,则捕获并打印 printf("Error: %s\n", $exception->getMessage()); } finally { // 释放 PDO 连接实例 $pdo = null; }
在實例化PDO 物件建立資料庫連線時,至少需要傳入三個字串類型參數,第一個參數包含了資料庫主機訊息,例如資料庫驅動類型(這裡是mysql
)、IP位址(本機位址是127.0.0.1
)、連接埠號碼(可選,預設是3306
)、要連接的資料庫名稱(test
)、字元編碼資訊(utf8mb4
)等,第二個參數是使用者名,第三個參數是密碼。
接下來,我們就可以呼叫PDO 物件實例$pdo
上的query 方法執行指定SQL 語句與資料庫互動了(增刪改查),不過在此之前,我們先呼叫了quote 方法對查詢SQL 語句進行轉義,該函數的功能類似mysqli_escape_string
。
執行完 SQL 查詢後,會傳回一個查詢結果集,可以透過循環遍歷列印該結果。
此外,透過PDO 擴充功能進行資料庫連接和查詢操作如果發生錯誤,會拋出異常,為了增加程式的健全性,我們在透過try...catch...
語句捕獲PDOException
異常,並列印錯誤訊息,最後透過finally
語句釋放PDO 物件實例,因為該語句區塊不管是否拋出例外都會執行。
執行php -S localhost:9000
啟動內建HTTP 伺服器進行測試,在瀏覽器中存取http://localhost:9000/mysql/pdo.php
,即可看到正常的列印結果:
我們修改下上述程式碼中的連線訊息,例如將密碼值調整為test
,這個時候就會捕獲到PDO 異常,並列印錯誤訊息:
#註:錯誤訊息中的IP 位址是MySQL Docker 容器內部的IP 位址。可以忽略,這個報錯是密碼錯誤,而不是 IP 位址的問題。
#想了解更多相關文章,請關注php mysql欄位!
以上是透過PDO擴展與MySQL資料庫互動實現基本使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3 Linux新版
SublimeText3 Linux最新版

記事本++7.3.1
好用且免費的程式碼編輯器

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中