萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 網路程式設計 >> PHP 程式設計

PHP 連線 MySQL 完整教學:PDO、mysqli、連線池、字元集設定與錯誤處理

推薦:PDO 連線(支援多種資料庫、例外處理)

<?php
$host = '127.0.0.1';
$db   = 'test';
$user = 'root';
$pass = '123456';
$charset = 'utf8mb4';

$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$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, $pass, $options);
    echo '連線成功';
} catch (PDOException $e) {
    die('連線失敗:' . $e->getMessage());
}

mysqli 物件導向寫法

$mysqli = new mysqli('127.0.0.1', 'root', '123456', 'test', 3306);
if ($mysqli->connect_errno) {
    die('連線失敗:' . $mysqli->connect_error);
}
$mysqli->set_charset('utf8mb4');

長連線(Persistent Connection)

// PDO
$pdo = new PDO($dsn, $user, $pass, [
    PDO::ATTR_PERSISTENT => true,
    // 其他選項...
]);

// mysqli
$mysqli = new mysqli('p:127.0.0.1', 'root', '123456', 'test');

注意:長連線會重用進程連線,減少建立開銷,但可能導致連線數耗盡、狀態殘留(如交易未提交),高併發需謹慎評估。

字元集設定最佳實務

  • DSN 中指定 charset=utf8mb4(PDO)
  • $mysqli->set_charset('utf8mb4')(mysqli)
  • 資料表/欄位同步採用 utf8mb4_unicode_ci
  • PHP 檔案儲存為 UTF-8 無 BOM

錯誤處理模式比較

模式PDOmysqli
例外模式(推薦)PDO::ERRMODE_EXCEPTIONmysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT)
警告模式PDO::ERRMODE_WARNING預設行為
靜默模式PDO::ERRMODE_SILENTmysqli_report(MYSQLI_REPORT_OFF)

連線類別封裝範例(單例模式)

class Database {
    private static $pdo = null;

    public static function getConnection() {
        if (self::$pdo === null) {
            $dsn = "mysql:host=127.0.0.1;dbname=test;charset=utf8mb4";
            self::$pdo = new PDO($dsn, 'root', '123456', [
                PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            ]);
        }
        return self::$pdo;
    }
}

// 使用
$pdo = Database::getConnection();

原始來源:www.111cn.net

copyright © 萬盛學電腦網 all rights reserved