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

ECMall MySQL 資料庫操作簡易指南:db() 工廠與常用查詢方法

     編輯:PHP 相關知識

ECMall 封裝資料庫操作於 `db()` 工廠函式,回傳資料庫物件支援鏈式查詢。本文整理最常用的 6 大查詢方法,適合二次開發快速上手。

核心入口

<?php
$db = &db(); // 取得資料庫物件實例 (引用傳回)
// 或
$db = ecmall_db::instance(); // 視版本而定
?>

六大常用查詢方法

1. 取得單行關聯陣列 `getrow()`

<?php
$user = $db->getrow("SELECT * FROM ecm_member WHERE user_id = 111");
print_r($user);
/*
Array
(
    [user_id] => 111
    [user_name] => 'john'
    [email] => 'john@example.com'
    ...
)
*/
?>

2. 取得單一欄位值陣列 `getcol()`

<?php
$ids = $db->getcol("SELECT user_id FROM ecm_member WHERE status = 1");
print_r($ids); // [111, 112, 113, ...]
?>

3. 取得多行關聯陣列 `getall()`

<?php
$users = $db->getall("SELECT user_id, user_name, email FROM ecm_member WHERE status = 1 LIMIT 10");
foreach ($users as $row) {
    echo "{$row['user_name']} <{$row['email']}>\n";
}
?>

4. 取得單一純量值 `getone()`

<?php
$count = $db->getone("SELECT COUNT(*) FROM ecm_member");
echo "總會員數: $count";

$maxId = $db->getone("SELECT MAX(user_id) FROM ecm_member");
echo "最大 ID: $maxId";
?>

5. 執行非查詢 SQL `query()` (INSERT/UPDATE/DELETE/DDL)

<?php
// 更新
$db->query("UPDATE ecm_member SET last_login = " . gmtime() . " WHERE user_id = 111");

// 刪除
$db->query("DELETE FROM ecm_member WHERE user_id = 999");

// 建表
$db->query("CREATE TABLE tmp_log (id INT AUTO_INCREMENT PRIMARY KEY, msg VARCHAR(255))");
?>

6. 取得最後插入 ID `insert_id()`

<?php
$db->query("INSERT INTO ecm_member (user_name, email, reg_time) VALUES ('newuser', 'new@test.com', " . gmtime() . ")");
$newId = $db->insert_id();
echo "新會員 ID: $newId";
?>

完整範例:會員列表分頁

<?php
function memberList(int $page = 1, int $pageSize = 20): array {
    $db = &db();
    $offset = ($page - 1) * $pageSize;

    // 總數
    $total = (int)$db->getone("SELECT COUNT(*) FROM ecm_member WHERE status = 1");

    // 分頁資料
    $sql = "SELECT user_id, user_name, email, reg_time FROM ecm_member WHERE status = 1 ORDER BY user_id DESC LIMIT $offset, $pageSize";
    $list = $db->getall($sql);

    return [
        'total' => $total,
        'page' => $page,
        'page_size' => $pageSize,
        'list' => $list,
    ];
}

// 使用
$result = memberList(1, 10);
echo "共 {$result['total']} 筆\n";
foreach ($result['list'] as $m) {
    echo "{$m['user_id']} | {$m['user_name']} | {$m['email']}\n";
}
?>

進階技巧與注意事項

主題說明
SQL 注入防範所有變數**必須**經過 `$db->escape()` 或參數化 (若支援)。
`$sql = "SELECT * FROM t WHERE name = '" . $db->escape($name) . "'";`
事務控制`$db->query('START TRANSACTION');` → 操作 → `$db->query('COMMIT');` / `$db->query('ROLLBACK');`
預處理語句部分版本支援 `$db->prepare()` / `$stmt->execute()`,優先使用。
錯誤處理查詢失敗回傳 `false`,建議封裝工具函式拋出異常或記錄日誌。
模型層優先業務邏輯**優先使用模型** `&m('member')->get($id)`,封裝驗證、快取、關聯,直接操作 DB 僅用於複雜報表/遷移/修復。
引用傳回 `&db()`舊版 PHP 需 `&` 確保單例,PHP 5+ 物件預設引用行為,可省略 `&`。

常用模型操作對照 (建議優先用)

<?php
$model = &m('member');

// 單筆
$model->get($userId);                    // 主鍵查詢
$model->getOne(['email' => $email]);     // 條件查單筆

// 多筆
$model->find(['status' => 1], ['limit' => 10, 'order' => 'user_id DESC']);

// 新增
$model->add(['user_name' => 'xxx', 'email' => 'xxx@test.com']);

// 更新
$model->edit($userId, ['last_login' => gmtime()]);

// 刪除
$model->drop($userId); // 軟刪除或硬刪視模型定義
?>
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved