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

PHP 依參數動態產生 MySQL SQL 語句類完整實作

     編輯:PHP 綜合知識

在專案開發中,重複撰寫 INSERT、UPDATE、DELETE、SELECT 語句不僅繁瑣且易出錯。本文介紹一個 MyLibSQLGen 類別,透過設定資料表、欄位、數值、條件等參數,自動產生標準 SQL 語句,支援 LEFT JOIN、ORDER BY、LIKE 搜尋等進階功能,大幅提升開發效率與程式碼可維護性。

一、類別核心功能

  • 支援 INSERT / UPDATE / DELETE / SELECT 四大基本操作
  • 可設定 WHERE 條件(含 AND/OR 邏輯)
  • 支援 LEFT JOIN 多表關聯
  • 支援 ORDER BY 排序(依欄位索引)
  • 支援 全欄位 / 指定欄位 LIKE 搜尋
  • 自動處理密碼欄位加密(PASSWORD())與數值型別不加引號

二、使用範例

require_once("class_mylib_SQLGen-1.0.php");

$obj = new MyLibSQLGen();

// --- INSERT ---
$obj->clear_all_assign();
$obj->setFields(['name','address','city']);
$obj->setValues(['Fadjar','Resultmang Raya Street','Jakarta']);
$obj->setTables(['customer']);
$obj->getInsertSQL();
echo $obj->Result; // INSERT INTO customer (name,address,city) VALUES ('Fadjar','Resultmang Raya Street','Jakarta')

// --- UPDATE ---
$obj->clear_all_assign();
$obj->setFields(['name','address','city']);
$obj->setValues(['Fadjar','Resultmang Raya Street','Jakarta']);
$obj->setTables(['customer']);
$obj->setConditions([['condition'=>"id='1'", 'connection'=>'']]);
$obj->getUpdateSQL();
echo $obj->Result; // UPDATE customer SET name='Fadjar',address='Resultmang Raya Street',city='Jakarta' WHERE id='1'

// --- DELETE ---
$obj->clear_all_assign();
$obj->setTables(['customer']);
$obj->setConditions([
    ['condition'=>"id='1'", 'connection'=>'OR'],
    ['condition'=>"id='2'", 'connection'=>'OR'],
    ['condition'=>"id='4'", 'connection'=>'']
]);
$obj->getDeleteSQL();
echo $obj->Result; // DELETE FROM customer WHERE id='1' OR id='2' OR id='4'

// --- SELECT (含搜尋) ---
$obj->clear_all_assign();
$obj->setFields(['id','name','address','city']);
$obj->setTables(['customer']);
$obj->setSearch(['name'=>'Fadjar Nurswanto','address'=>'Tomang Raya']); // 指定欄位搜尋
$obj->getQuerySQL();
echo $obj->Result; // SELECT id,name,address,city FROM customer WHERE (name LIKE '%Fadjar%' OR name LIKE '%Nurswanto%') AND (address LIKE '%Tomang%' OR address LIKE '%Raya%')

三、類別原始碼重點解析

完整類別碼約 400 行,核心方法包括:

  • CombineFieldValue():將欄位與數值陣列組合成 SQL 片段,自動判斷型別與密碼加密
  • BuildCondition():依 Conditions 陣列產生 WHERE 子句
  • BuildLeftJoin():解析 LeftJoin 陣列產生 JOIN 子句
  • BuildSearch():支援字串或關聯陣列兩種搜尋模式,產生 LIKE 條件
  • BuildOrder():依 Order 索引對應 Fields 產生 ORDER BY
  • clear_all_assign():重置所有屬性,避免多次呼叫時資料殘留

四、適用場景與注意事項

  1. 快速原型開發:適合 CRUD 為主的後台管理系統、表單處理模組。
  2. 防止 SQL Injection:本類別未內建參數綁定,實際上線前請搭配 mysqli_real_escape_string 或改用 PDO Prepared Statements。
  3. 擴充性:可繼承並覆寫 BuildSearch() 以支援更複雜的全文搜尋邏輯。

掌握此工具類,能讓資料庫操作程式碼更乾淨、一致,減少手寫 SQL 的拼字錯誤風險。

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