首頁  >  文章  >  專題  >  透過PDO擴展與MySQL資料庫互動實現基本使用

透過PDO擴展與MySQL資料庫互動實現基本使用

coldplay.xixi
coldplay.xixi轉載
2020-09-08 13:49:182669瀏覽

透過PDO擴展與MySQL資料庫互動實現基本使用

相關學習推薦:mysql教學php程式設計

在上在篇教程中,請為大家介紹如何透過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 擴充功能):

PHP 扩展

且可以看到,除了PDO 擴充功能外,還有一個與之匹配的具體資料庫擴充pdo_mysql,有了這個具體擴展,才能存取MySQL 資料庫。另外,PDO 提供了統一的資料庫存取接口,所以實現了PDO 接口的具體資料庫擴展可以透過完全一樣的方法存取資料庫,這樣一來,如果應用需要切換資料庫,就不需要對資料庫操作碼進行重構,光憑這一點,就可以丟掉MySQLi 擴展,投入PDO 的懷抱了。

如果安裝過Laradock,可以啟動workspace 容器,然後查看其預先安裝的PHP 擴展,可以看到,它包含更多具體的PDO 資料庫驅動支援:

PHP 扩展

其中pdo_pgsql 表示PostgresSQL 資料庫驅動,pdo_sqlite 表示SQLite 資料庫驅動。

建立資料庫連線與基本查詢

在我們的教學課程中,還是選擇以 MySQL 為例進行示範。

要透過PDO 擴充功能建立資料庫連接,直接實例化PDO 物件即可,我們寫一段簡單的範例程式碼如下(在php_learning/mysql 目錄下新建pdo.php 儲存程式碼):

<?php

// 设置连接属性
$dsn = &#39;mysql:host=127.0.0.1;port=3306;dbname=test;charset=utf8mb4&#39;;
$user = &#39;root&#39;;
$pass = &#39;root&#39;;

try {
    // 建立连接
    $pdo = new PDO($dsn, $user, $pass);
    // 执行 SQL 查询
    $sql = $pdo->quote(&#39;SELECT * FROM `post` ORDER BY `id` DESC&#39;);
    $res = $pdo->query($sql);
    // 打印查询结果
    echo &#39;<pre class="brush:php;toolbar:false">&#39;;
    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 ,即可看到正常的列印結果:

透過PDO擴展與MySQL資料庫互動實現基本使用

我們修改下上述程式碼中的連線訊息,例如將密碼值調整為test,這個時候就會捕獲到PDO 異常,並列印錯誤訊息:

透過PDO擴展與MySQL資料庫互動實現基本使用

#註:錯誤訊息中的IP 位址是MySQL Docker 容器內部的IP 位址。可以忽略,這個報錯是密碼錯誤,而不是 IP 位址的問題。

想了解更多相關文章,請關注php mysql欄位!

#

以上是透過PDO擴展與MySQL資料庫互動實現基本使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:xueyuanjun.com。如有侵權,請聯絡admin@php.cn刪除