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

PHP 執行中文 SQL 查詢無結果:編碼不一致排查與修正

     編輯:程式設計綜合問答

現象

phpMyAdmin 直接執行 SELECT * FROM class WHERE name='計算機' 有結果,PHP 代碼執行同樣 SQL 無結果。

根本原因

PHP 源文件編碼與數據庫連接/表字段編碼不一致,導致中文參數在傳輸/比較時亂碼。

檢查清單

  1. PHP 文件編碼:編輯器右下角確認為 UTF-8 無 BOM(推薦)或 GBK,與數據庫一致。
  2. 數據庫連接編碼:
    // mysqli
    $mysqli->set_charset("utf8mb4"); // 或 gbk
    // PDO
    $pdo = new PDO($dsn, $user, $pass, [PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4"]);
    
  3. 表字段編碼:
    SHOW CREATE TABLE class;
    -- 關注 CHARSET=xxx COLLATE=xxx
    
  4. HTML 頁面編碼聲明:
    <meta charset="UTF-8">  // 或 gbk
    

統一最佳實踐:全鏈路 UTF-8

-- 1. 數據庫/表/列
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE TABLE class (name VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci);

-- 2. PHP 連接
$mysqli = new mysqli("localhost", "user", "pass", "mydb");
$mysqli->set_charset("utf8mb4");

-- 3. PHP 文件保存為 UTF-8 無 BOM
-- 4. HTML 

快速驗證

// 在 PHP 中打印實際發送的 SQL 與十六進制
$sql = "SELECT * FROM class WHERE name='計算機'";
echo bin2hex($sql); // 對比 phpMyAdmin 中複製的 SQL 十六進制
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved