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

帝國 CMS 內建資料庫類 mysqlquery 使用全攻略

     編輯:PHP 相關知識

前言

帝國 CMS 封裝了 mysqlquery 類(位於 e/class/db_sql.php),直接使用框架原生資料庫類別可減少依賴、提升效率、統一錯誤處理。本文詳細說明連線建立、核心方法(query、query1、fetch 系列)與實戰測試代碼。

環境準備與連線建立

<?php
// 1. 引入核心設定與資料庫類別
require_once '../../class/connect.php'; // 含資料庫連線參數、常數定義
require_once '../../class/db_sql.php';  // mysqlquery 類別定義

// 2. 建立連線並實例化
$link = db_connect();        // 回傳 MySQL 連線資源
$empire = new mysqlquery();  // 實例化資料庫操作類

// ... 此處執行各種查詢操作 ...

// 3. 關閉連線並釋放資源
db_close();
$empire = null;
?>

核心方法對比:query() vs query1()

方法對應原生函數成功回傳失敗行為適用場景
query($sql)mysql_query()Resource / truedie() 終止腳本,輸出錯誤訊息與 SQL關鍵操作、必須成功的 DDL/DML
query1($sql)mysql_query()Resource / true回傳 false,不終止腳本一般查詢、需自行判斷失敗處理

實戰測試代碼

測試 query() —— 失敗即終止

<?php
require_once '../../class/connect.php';
require_once '../../class/db_sql.php';

$link = db_connect();
$empire = new mysqlquery();

function hr() { echo '<hr />'; }

// 1. 查詢成功 → 回傳 Resource
$sql = $empire->query("SELECT id, title FROM {$dbtbpre}ecms_news");
var_dump($sql); hr();

// 2. 更新成功 → 回傳 true
$sql = $empire->query("UPDATE {$dbtbpre}ecms_news SET title='標題' WHERE id=1");
var_dump($sql); hr();

// 3. 更新失敗(欄位不存在) → die() 輸出錯誤,後續代碼不執行
$sql = $empire->query("UPDATE {$dbtbpre}ecms_news SET titlesss='標題' WHERE id=1");
var_dump($sql); // 不會執行到這裡
hr();

db_close();
$empire = null;
?>

query() 失敗時輸出範例:

MySQL Error: Unknown column 'titlesss' in 'field list'
UPDATE ***_ecms_news SET titlesss='標題' WHERE id=1

測試 query1() —— 失敗回傳 false 繼續執行

<?php
require_once '../../class/connect.php';
require_once '../../class/db_sql.php';

$link = db_connect();
$empire = new mysqlquery();

function hr() { echo '<hr />'; }

// 1. 查詢成功
$sql = $empire->query1("SELECT id, title FROM {$dbtbpre}ecms_news");
var_dump($sql); hr(); // resource

// 2. 更新成功
$sql = $empire->query1("UPDATE {$dbtbpre}ecms_news SET title='測試更新標題' WHERE id=1");
var_dump($sql); hr(); // true

// 3. 更新失敗 → 回傳 false,腳本繼續
$sql = $empire->query1("UPDATE {$dbtbpre}ecms_news SET titlesss='測試更新標題' WHERE id=1");
var_dump($sql); hr(); // false

db_close();
$empire = null;
?>

常用資料擷取方法(配合 query/query1 回傳的 Resource)

方法說明範例
fetch($sql)取得單行關聯陣列,指標前進$row = $empire->fetch($sql);
fetch1($sql)直接取得第一行關聯陣列(內部已執行 query)$row = $empire->fetch1("SELECT * FROM table WHERE id=1");
fetch2($sql)取得單行數值陣列(索引 0,1,2...)$row = $empire->fetch2($sql);
num($sql)取得結果集行數$count = $empire->num($sql);
free($sql)釋放結果集記憶體$empire->free($sql);

完整 CRUD 範例

<?php
require_once '../../class/connect.php';
require_once '../../class/db_sql.php';

$link = db_connect();
$empire = new mysqlquery();

// Create
$empire->query1("INSERT INTO {$dbtbpre}ecms_news (title, newstime) VALUES ('新文章', '".time()."')");
$new_id = $empire->lastid(); // 取得自增 ID

// Read
$sql = $empire->query1("SELECT * FROM {$dbtbpre}ecms_news WHERE id=$new_id");
$row = $empire->fetch($sql);
echo $row['title'];

// Update
$empire->query1("UPDATE {$dbtbpre}ecms_news SET title='更新標題' WHERE id=$new_id");

// Delete
$empire->query1("DELETE FROM {$dbtbpre}ecms_news WHERE id=$new_id");

db_close();
$empire = null;
?>

注意事項與最佳實踐

  • SQL 注入防護:框架未自動參數綁定,務必自行使用 intval()、addslashes() 或 $empire->escape()(若有)處理變數
  • 資料表前綴:統一使用 {$dbtbpre} 常數,確保多站點/備份相容
  • 錯誤處理策略:關鍵寫入用 query()(失敗即停),一般讀取用 query1() 搭配 if (!$sql) { ... }
  • PHP 版本相容:帝國 CMS 7.5+ 已支援 mysqli,新專案建議改用 mysqliquery 類別

總結

善用帝國 CMS 內建 mysqlquery 類別,能簡化資料庫操作代碼、統一錯誤處理、減少外部依賴。核心在於理解 query()(嚴格)與 query1()(寬鬆)的失敗行為差異,並配合 fetch 系列方法高效擷取資料。

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