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

PHP 入門必讀:MySQL/Mysqli/PDO 選擇、SQL 注入防範、UTF-8 與效能優化全攻略

     編輯:PHP 相關知識

資料庫擴展選擇:mysqli vs PDO

  • MySQL 4.1.3+:官方強烈建議改用 mysqli(MySQL Improved)或 PDO(PHP Data Objects)。
  • mysqli 優勢:物件導向介面、預處理語句防 SQL 注入、多語句/事務支援。
  • PDO 優勢:資料庫抽象層,支援 MySQL、PostgreSQL、SQLite、SQL Server 等,專案未來可能遷移資料庫時優先選擇。

鐵律:永遠不要信任使用者輸入

前端 JS 驗證只能提升體驗,後端必須二次驗證/過濾。典型 SQL 注入範例:

$username = $_POST['name'];
$password = $_POST['password'];
$sql = "SELECT userid FROM usertable WHERE username='$username' AND password='$password'";

攻擊者輸入 admin' -- 即繞過密碼驗證。
正確做法:使用預處理語句

$stmt = $mysqli->prepare("SELECT userid FROM usertable WHERE username=? AND password=?");
$stmt->bind_param("ss", $username, $password);
$stmt->execute();

編碼統一採用 UTF-8

  • 資料庫、資料表、欄位、連線、HTML 頁面、PHP 檔案儲存編碼全鏈路 UTF-8。
  • 連線時設定:$mysqli->set_charset("utf8mb4");(支援 Emoji)。
  • 避免 GBK/Big5 混用導致亂碼、截斷、索引失效。
  • 善用 SQL 原生功能,避免在 PHP 迴圈處理大量資料

    • 平均值用 AVG(),統計用 COUNT(),分組用 GROUP BY。
    • 先在 SQL 完成篩選/聚合,再取回 PHP 處理,減少網路傳輸與記憶體佔用。
    • 避免 SELECT *,明確列出需要欄位,降低 I/O 與記憶體。

    索引策略:精準索引,拒絕過度/不足

    • WHERE、JOIN、ORDER BY、GROUP BY 後的欄位建立索引。
    • 複合索引遵循「最左前綴原則」。
    • 過度索引會拖慢 INSERT/UPDATE/DELETE(需同步維護 B+ 樹)。
    • 定期用 EXPLAIN、SHOW INDEX、pt-query-digest 分析慢查詢。

    資料類型選擇原則

    • 日期時間用 DATE/DATETIME/TIMESTAMP,勿用字串/整數儲存。
    • 金額用 DECIMAL(10,2),避免浮點誤差。
    • 避免在欄位存序列化物件/JSON 導致查詢困難,必要時用 JSON 欄位(MySQL 5.7+)並建立虛擬欄位索引。

    備份與多資料庫考量

    • 自動化備份(mysqldump + 定時任務 + 異地儲存),定期演練恢復。
    • PostgreSQL、MariaDB、SQLite、SQL Server Express、Oracle XE 皆為可行替代,依專案需求評估。

    快速檢核清單

    1. 是否使用 mysqli/PDO + 預處理語句?
    2. 所有使用者輸入是否經過後端驗證?
    3. 全鏈路 UTF-8(utf8mb4)?
    4. SQL 是否避免 SELECT *、善用聚合函式?
    5. 關鍵查詢是否有索引支援?
    6. 備份策略是否落實?

    建立上述習慣,能讓 PHP + MySQL 專案在安全性、效能、維護性上穩健前行。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved