如何用 PDO 取代 MySQL 函數以提高安全性和效能?

Barbara Streisand
發布: 2024-11-09 07:12:02
原創
256 人瀏覽過

How can I replace MySQL functions with PDO for improved security and performance?

用 PDO 取代 MySQL 函數

簡介

PHP 的 mysql 擴充已棄用,將來會被刪除。作為替代方案,建議使用 PDO(PHP 資料物件)擴充功能來連接 MySQL 和其他資料庫。本文提供如何用 PDO 取代 mysql 函數的指南。

為什麼要轉換成 PDO?

  • 提高安全性: PDO提供對 SQL 注入攻擊的保護。
  • 改進效能: PDO 最大限度地減少開銷並提供更好的快取機制。
  • 資料庫抽象化: PDO 允許無縫連接到多種資料庫類型。

連接到MySQL

$dsn = 'mysql:dbname=databasename;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';

$connection = new PDO($dsn, $user, $password);
$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
登入後複製

連接到MSSQL

$dsn = 'sqlsrv:Server=127.0.0.1;Database=databasename';
$user = 'dbuser';
$password = 'dbpass';

$connection = new PDO($dsn, $user, $password);
$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
登入後複製

執行查詢

PDO使用準備好的語句來避免SQL注入

  • 使用命名參數準備查詢:
$SQL = 'SELECT ID, EMAIL FROM users WHERE name = :username';
$stmt = $connection->prepare($SQL);
$stmt->execute([':username' => 'someone']);
登入後複製
  • 使用索引準備查詢參數:
$SQL = 'SELECT ID, EMAIL FROM users WHERE name = ?';
$stmt = $connection->prepare($SQL);
$stmt->execute(['someone']);
登入後複製

取得結果

  • 取得單行作為array:
$row = $stmt->fetch(PDO::FETCH_ASSOC);
登入後複製
  • 將所有行作為陣列的陣列取得:
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
登入後複製

範例類別

一個簡單的PDO連接類別封裝常用操作:

class PdoConnection {

    public function __construct($dsn, $user, $password, $options = []) {
        // ... initialize connection
    }

    public function query($sql) {
        // ... execute query and return result
    }

    public function prepare($sql, $params = []) {
        // ... execute prepared query and return result
    }
}
登入後複製

以上是如何用 PDO 取代 MySQL 函數以提高安全性和效能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板