首頁 >資料庫 >mysql教程 >為什麼要在 PHP 中用 PDO 取代 MySQL 函數?

為什麼要在 PHP 中用 PDO 取代 MySQL 函數?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-10 08:53:45710瀏覽

Why Should I Replace MySQL Functions with PDO in PHP?

從 MySQL 函數轉換到 PHP 中的 PDO

PHP 的 MySQL 函數預計將被棄用並最終刪除。 為了確保未來的兼容性並利用增強的安全性和功能,開發人員應遷移到 PHP 資料物件 (PDO),這是一個強大的、物件導向的資料庫存取層。

PDO 的優點:

  • 現代化: PDO 以現代方法取代過時的 MySQL 函數。
  • 資料庫不可知論: PDO 提供了一個一致的介面來連接各種資料庫系統,而不僅僅是 MySQL。這簡化了資料庫切換並提高了程式碼可移植性。
  • SQL 注入預防: PDO 的準備語句對於防止 SQL 注入漏洞至關重要,這是一個主要的安全性問題。

使用 PDO 連接到資料庫

MySQL 連線:

<code class="language-php">$dsn = 'mysql:dbname=databasename;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';

$dbh = new PDO($dsn, $user, $password);</code>

MSSQL 連線:

<code class="language-php">$dsn = 'sqlsrv:Server=127.0.0.1;Database=databasename';
$user = 'dbuser';
$password = 'dbpass';

$dbh = new PDO($dsn, $user, $password);</code>

使用準備好的語句執行查詢

PDO 利用準備好的語句來有效率且安全地執行查詢。 以下是綁定變數的方法:

命名參數:

<code class="language-php">$statement = $dbh->prepare('SELECT * FROM users WHERE name = :username');
$statement->execute([':username' => 'example']);</code>

索引參數:

<code class="language-php">$statement = $dbh->prepare('SELECT * FROM users WHERE name = ?');
$statement->execute(['example']);</code>

擷取查詢結果

多種方法有利於結果檢索:

  • fetch():以陣列形式傳回單行。
  • fetchAll():將所有行作為數組的陣列傳回。
  • rowCount():提供受影響的行數(對於 INSERT、UPDATE、DELETE 有用)。

PDO 連接類別範例

為了增強程式碼組織和可重複使用性,請考慮自訂 PDO 類別:

<code class="language-php">class MyPDO {
    public $dbh;

    public function __construct($dsn, $username, $password) {
        $this->dbh = new PDO($dsn, $username, $password);
        $this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }

    public function query($sql) {
        return $this->dbh->query($sql);
    }

    public function prepare($sql) {
        return $this->dbh->prepare($sql);
    }
}

// Example Usage:
$mypdo = new MyPDO($dsn, $username, $password);
$stmt = $mypdo->prepare('SELECT * FROM users WHERE name = :name');
$stmt->execute([':name' => 'example']);
while ($row = $stmt->fetch()) {
    echo $row['name'];
}</code>

以上是為什麼要在 PHP 中用 PDO 取代 MySQL 函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn