如何通過PDO擴展與MySQL數(shù)據(jù)庫交互,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
目前創(chuàng)新互聯(lián)已為成百上千的企業(yè)提供了網(wǎng)站建設、域名、雅安服務器托管、網(wǎng)站改版維護、企業(yè)網(wǎng)站設計、額濟納網(wǎng)站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
今天我們來看看另一個 PHP 內(nèi)置的數(shù)據(jù)庫擴展 —— PDO,其全稱是 PHP Data Objects,即 PHP 數(shù)據(jù)對象。
PDO 為 PHP 訪問數(shù)據(jù)庫定義了一個輕量級的一致接口,因此它提供的是一個數(shù)據(jù)訪問抽象層,本身并不能實現(xiàn)任何數(shù)據(jù)庫交互功能,必須使用一個具體數(shù)據(jù)庫的 PDO 驅動來訪問數(shù)據(jù)庫服務,這些具體數(shù)據(jù)庫驅動包括 MySQL、PostgreSQL、SQLite、SQL Server、Oracle 等,因此 PDO 是一個更加標準、更加通用的數(shù)據(jù)庫擴展,而且完全是面向對象風格的,目前,在各個主流 PHP 框架中,PDO 已經(jīng)成為了構建數(shù)據(jù)庫交互的基礎組件,包括 Laravel 框架,也是基于 PDO 擴展提供數(shù)據(jù)庫訪問功能。
我們之前推薦的 PHP 本地集成開發(fā)環(huán)境都集成了對 PDO 擴展的支持(以下是 Laragon 預裝的 PHP 擴展):
并且可以看到,除了 PDO
擴展外,還有一個與之匹配的具體數(shù)據(jù)庫擴展 pdo_mysql
,有了這個具體擴展,才能訪問 MySQL 數(shù)據(jù)庫。另外,PDO 提供了統(tǒng)一的數(shù)據(jù)庫訪問接口,所以實現(xiàn)了 PDO 接口的具體數(shù)據(jù)庫擴展可以通過完全一樣的方法訪問數(shù)據(jù)庫,這樣一來,如果應用需要切換數(shù)據(jù)庫,就不需要對數(shù)據(jù)庫操作代碼進行重構,僅憑這一點,就可以扔掉 MySQLi 擴展,投入 PDO 的懷抱了。
如果安裝過 Laradock,可以啟動 workspace
容器,然后查看其預裝的 PHP 擴展,可以看到,它包含更多的具體 PDO 數(shù)據(jù)庫驅動支持:
其中 pdo_pgsql
表示 PostgresSQL 數(shù)據(jù)庫驅動,pdo_sqlite
表示 SQLite 數(shù)據(jù)庫驅動。
在我們的教程中,還是選擇以 MySQL 為例進行演示。
要通過 PDO 擴展建立數(shù)據(jù)庫連接,直接實例化 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);
// 執(zhí)行 SQL 查詢
$sql = $pdo->quote('SELECT * FROM `post` ORDER BY `id` DESC');
$res = $pdo->query($sql);
// 打印查詢結果
echo '<pre>';
foreach ($res as $row) {
print_r($row);
}
} catch (PDOException $exception) {
// 如果數(shù)據(jù)庫操作出現(xiàn)異常,則捕獲并打印
printf("Error: %s\n", $exception->getMessage());
} finally {
// 釋放 PDO 連接實例
$pdo = null;
}
在實例化 PDO 對象創(chuàng)建數(shù)據(jù)庫連接時,至少需要傳入三個字符串類型參數(shù),第一個參數(shù)包含了數(shù)據(jù)庫主機信息,比如數(shù)據(jù)庫驅動類型(這里是 mysql
)、IP地址(本地地址是 127.0.0.1
)、端口號(可選,默認是 3306
)、要連接的數(shù)據(jù)庫名稱(test
)、字符編碼信息(utf8mb4
)等,第二個參數(shù)是用戶名,第三個參數(shù)是密碼。
接下來,我們就可以調(diào)用 PDO 對象實例 $pdo
上的 query 方法執(zhí)行指定 SQL 語句與數(shù)據(jù)庫進行交互了(增刪改查),不過在此之前,我們先調(diào)用了 quote 方法對查詢 SQL 語句進行轉義,該函數(shù)的功能類似 mysqli_escape_string
。
執(zhí)行完 SQL 查詢后,會返回一個查詢結果集,可以通過循環(huán)遍歷打印該結果。
此外,通過 PDO 擴展進行數(shù)據(jù)庫連接和查詢操作如果出現(xiàn)錯誤,會拋出異常,為了增加程序的健壯性,我們在通過 try...catch...
語句捕獲 PDOException
異常,并打印錯誤信息,最后通過 finally
語句釋放 PDO 對象實例,因為該語句塊不管是否拋出異常都會執(zhí)行。
運行 php -S localhost:9000
啟動內(nèi)置 HTTP 服務器進行測試,在瀏覽器中訪問 http://localhost:9000/mysql/pdo.php
,即可看到正常的打印結果:
我們修改下上述代碼中的連接信息,比如將密碼值調(diào)整為 test
,這個時候就會捕獲到 PDO 異常,并打印錯誤消息:
注:錯誤信息中的 IP 地址是 MySQL Docker 容器內(nèi)部的 IP 地址。可以忽略,這個報錯是密碼錯誤,而不是 IP 地址的問題。
看完上述內(nèi)容,你們掌握如何通過PDO擴展與MySQL數(shù)據(jù)庫交互的方法了嗎?如果還想學到更多技能或想了解更多相關內(nèi)容,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
網(wǎng)頁名稱:如何通過PDO擴展與MySQL數(shù)據(jù)庫交互
當前地址:http://chinadenli.net/article24/jeioje.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供、虛擬主機、標簽優(yōu)化、云服務器、微信小程序、域名注冊
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)