首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 連接 MySQL 兩大擴展對比與中文亂碼徹底解決方案

     編輯:PHP 綜合知識

環境配置:啟用 MySQL 擴展

若遇到 Class 'mysqli' not found 錯誤,請檢查 php.ini:

  1. 搜尋 extension=php_mysql.dll,移除前方分號 ;。
  2. 在下方新增 extension=php_mysqli.dll(注意多一個 i)。
  3. 確認 extension_dir 路徑正確指向 ext/ 目錄。
  4. 將 php_mysql.dll、php_mysqli.dll 複製到系統目錄(如 C:\Windows\System32)。
  5. 重啟 Web 服務(Apache/Nginx/PHP-FPM)。

兩種連接方式對比

1. MySQLi(推薦,面向物件/程序雙模式)

<?php
$mysqli = new mysqli("127.0.0.1", "用戶名", "密碼", "資料庫名");

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

// 關鍵:設定字符集防止亂碼
$mysqli->query("SET NAMES utf8mb4"); // 推薦 utf8mb4 支援 emoji

$query = "SELECT * FROM `表` ORDER BY `theindex` DESC";
$result = $mysqli->query($query);

while (list($name, $theindex) = $result->fetch_row()) {
    echo "<br />{$name}{$theindex}";
}

$result->free();
$mysqli->close();
?>

2. PDO(資料庫抽象層,支援多種資料庫)

<?php
try {
    $pdo = new PDO(
        "mysql:host=127.0.0.1;dbname=資料庫名;charset=utf8mb4",
        "用戶名",
        "密碼",
        [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
    );

    $stmt = $pdo->query("SELECT * FROM `表` ORDER BY `theindex` DESC");
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        echo "<br />{$row['name']}{$row['theindex']}";
    }
} catch (PDOException $e) {
    die("連接失敗: " . $e->getMessage());
}
?>

⚠️ 已棄用:mysql_* 函數

mysql_connect()、mysql_query() 等在 PHP 5.5 棄用、PHP 7.0 移除,嚴禁在新專案使用。

中文亂碼核心解決三步驟

  1. 資料庫/表/欄位編碼:建表時指定 CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci。
  2. 連接時設定字符集:
    • MySQLi: $mysqli->set_charset('utf8mb4'); 或 query("SET NAMES utf8mb4")
    • PDO: DSN 中加入 charset=utf8mb4
  3. 輸出頁面宣告編碼:HTML <meta charset="utf-8">,PHP header("Content-Type: text/html; charset=utf-8");。

常見坑點提醒

  • SET NAMES gb2312 僅支援基本中文,無法儲存生僻字/Emoji,強烈建議全鏈路使用 utf8mb4。
  • PHP 檔案本身必須以 **UTF-8 無 BOM** 編碼儲存。
  • 資料庫連接字符集與表字符集不一致會導致「雙重編碼」亂碼。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved