ezSQL 是一個極精簡 (核心 < 2000 行) 、零依賴、支援多種資料庫 (MySQL, PostgreSQL, SQLite, Oracle, MS-SQL, PDO) 的 PHP 資料庫操作類。WordPress 核心資料庫層 wpdb 即基於 ezSQL 的 MySQL 實現衍生而來。其核心優勢在於:
get_results, get_row, get_var, get_col, query 覆蓋 95% 場景。debug(), vardump() 一鍵輸出 SQL、執行時間、結果結構。<?php
include_once "ez_sql_core.php";
include_once "ez_sql_mysql.php"; // 或 pdo/postgres/sqlite 等
$db = new ezSQL_mysql('db_user', 'db_password', 'db_name', 'db_host');
// 立即可用,自動連線、設定字符集 (UTF-8)
?>
| 方法 | 用途 | 回傳值 | 典型場景 |
|---|---|---|---|
get_results($sql) | 查詢多行 | 物件陣列 / null | 列表頁、報表 |
get_row($sql) | 查詢單行 | 物件 / null | 詳情頁、單筆業務 |
get_col($sql, $col=0) | 查詢單欄 | 陣列 / null | ID 列表、下拉選項 |
get_var($sql) | 查詢單值 | 純量 / null | COUNT(*), 設定值 |
query($sql) | 執行寫入/更新/刪除 | 影響行數 / false | INSERT/UPDATE/DELETE |
debug() | 輸出最後 SQL 與結果表格 | void | 開發除錯 |
vardump($var) | 結構化輸出變數 | void | 變數檢視 |
select($dbName) | 切換資料庫 | bool | 多庫操作 |
hide_errors() / show_errors() | 控制錯誤顯示 | void | 生產/開發環境切換 |
$users = $db->get_results("SELECT id, name, email FROM users WHERE status=1");
foreach ($users as $user) {
echo "{$user->name} <{$user->email}><br/>";
}
$user = $db->get_row("SELECT name, email FROM users WHERE id = 2");
if ($user) echo $user->name;
$count = $db->get_var("SELECT COUNT(*) FROM users");
echo "總用戶數: $count";
$db->query("INSERT INTO users (name, email) VALUES ('Justin', 'jv@foo.com')");
$newId = $db->insert_id; // 自動獲取自增 ID
query("UPDATE users SET name = 'Justin' WHERE id = 2");
$db->debug(); // 瀏覽器直接顯示格式化表格,含執行時間 (ms)
$results = $db->get_results("SELECT * FROM users LIMIT 5");
$db->vardump($results); // 類似 var_dump 但格式更美觀、可摺疊
get_col("SELECT name, email FROM users", 0);
foreach ($names as $name) echo $name;
// 寫法 B (更簡潔)
foreach ($db->get_col("SELECT name FROM users") as $name) echo $name;
select("my_database");
foreach ($db->get_col("SHOW TABLES") as $table) {
$db->debug();
$db->get_results("DESC $table");
}
$db->debug();
ezSQL 內建 prepare 機制 (v3.0+):
$sql = $db->prepare("SELECT * FROM users WHERE email = %s AND status = %d", $email, 1);
$rows = $db->get_results($sql);
query("START TRANSACTION");
try {
$db->query("INSERT ...");
$db->query("UPDATE ...");
$db->query("COMMIT");
} catch (Exception $e) {
$db->query("ROLLBACK");
}
hide_errors();
// 設定自定義錯誤處理器
function myErrorHandler($msg) { error_log("[ezSQL] $msg"); }
$db->error_handler = 'myErrorHandler';
mysqli_query/fetch_assoc 為 get_results/get_row。debug() 驗證 SQL 正確性。hide_errors()。ezSQL 以「極簡」贏得 WordPress 等頂級專案青睞。對於中小型專案、快速原型、不想引入重型 ORM (Doctrine/Eloquent) 的團隊,它是 最佳平衡點:既保留 SQL 完全控制權,又消除樣板代碼與安全隱患。建議直接納入專案 vendor/ 目錄,使用 Composer 自動載入 (或手動 include_once) 即刻享受開發效率提升。