萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

PHP 連接 MySQL 資料庫:mysqli 與 PDO 現代寫法

注意:舊版 mysql_* 函式已於 PHP 7.0 移除,現代專案請使用 mysqli (程序/物件風格) 或 PDO (資料庫抽象層)。

mysqli 物件風格 (推薦)

<?php
$mysqli = new mysqli('localhost', 'user', 'password', 'database');

if ($mysqli->connect_errno) {
    die('連線失敗: ' . $mysqli->connect_error);
}

$mysqli->set_charset('utf8mb4'); // 重要:設定字元集

// 查詢
$result = $mysqli->query('SELECT * FROM users');
while ($row = $result->fetch_assoc()) {
    echo $row['name'] . '
'; } $result->free(); $mysqli->close(); ?>

PDO (可攜多資料庫)

<?php
$dsn = 'mysql:host=localhost;dbname=database;charset=utf8mb4';
$options = [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES => false,
];
try {
    $pdo = new PDO($dsn, 'user', 'password', $options);
    
    // 準備語句 (防 SQL 注入)
    $stmt = $pdo->prepare('SELECT * FROM users WHERE id = ?');
    $stmt->execute([$_GET['id'] ?? 1]);
    $user = $stmt->fetch();
    var_dump($user);
} catch (PDOException $e) {
    die('連線失敗: ' . $e->getMessage());
}
?>

關鍵差異

特性mysqliPDO
資料庫支援僅 MySQL12+ 驅動
預處理語句支援支援 (模擬/原生)
命名參數不支援支援 :name
物件/程序雙介面是僅物件

最佳實務

  1. 永遠使用預處理語句 防 SQL 注入。
  2. 連線字串指定 charset=utf8mb4 完整支援 Emoji。
  3. 錯誤模式設為 ERRMODE_EXCEPTION 統一異常處理。
  4. 長連線 (persistent) 需謹慎評估連線池設定。
copyright © 萬盛學電腦網 all rights reserved