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

PHP5 管理 MySQL5 任意資料表完整代碼實例(一):架構設計與列表頁實作

     編輯:PHP 相關知識

專案目標

開發一套通用的資料表管理介面,支援對「第一欄為主鍵」的任意資料表執行 CRUD 操作,無需為每張表撰寫專用代碼。

適用範圍與限制

  • ✅ 適用:第一欄為 Primary Key 的資料表(欄位名不限)
  • ✅ 任意欄位數量、任意資料型別
  • ❌ 不支援:複合主鍵、無主鍵、主鍵非第一欄的表
  • ❌ 無輸入驗證、無權限控制、直接拼接 SQL(教學用途,勿上生產)

檔案架構

檔案功能
index.php輸入表名,進入管理介面
tables.php顯示表內容、提供增/刪/改入口
add.php / addsoftware.php新增記錄
edit.php / editsave.php編輯記錄
del.php / dele.php刪除記錄

核心代碼:index.php

<!DOCTYPE html>
<html><head><meta charset="gb2312"><title>資料表管理</title></head><body>
<h2>請輸入資料表名稱</h2>
<form method="post" action="tables.php">
  <table><tr>
    <td>表名: <input name="tablename" size="30" maxlength="30"></td>
    <td><input type="submit" value="顯示"></td>
  </tr></table>
</form>
</body></html>

核心代碼:tables.php(列表頁)

<?php
$database = "sunsite";
$tablename = $_REQUEST['tablename'];

mysql_connect("localhost", "root", "") or die("DB連線失敗");

// 1. 取得欄位名(作為表頭)
$query = "SHOW COLUMNS FROM $tablename";
$result = mysql_db_query($database, $query);
$column = 0;
if ($result) {
    echo "<table border=1><tr>";
    while ($r = mysql_fetch_array($result)) {
        echo "<th>{$r[0]}</th>";
        $column++;
    }
    echo "</tr>";
    mysql_free_result($result);
}

// 2. 讀取所有資料列
$query = "SELECT * FROM $tablename";
$result = mysql_db_query($database, $query);
if ($result) {
    while ($r = mysql_fetch_array($result)) {
        echo "<tr>";
        for ($col=0; $col<$column; $col++) {
            echo "<td>{$r[$col]}</td>";
        }
        echo "</tr>";
    }
    echo "</table>";
    mysql_free_result($result);
} else {
    echo "無資料";
}

// 3. 操作入口
if ($column > 0) {
    echo "<ul>
    <li><a href='add.php?tablename=$tablename'>新增</a></li>
    <li><a href='edit.php?tablename=$tablename'>編輯</a></li>
    <li><a href='del.php?tablename=$tablename'>刪除</a></li>
    <li><a href='index.php'>返回</a></li>
    </ul>";
}
?>

關鍵技術點解析

  1. SHOW COLUMNS:MySQL 專用指令,快速取得欄位定義(名稱、型別、預設值、Key 屬性等)
  2. mysql_db_query():舊式函式,指定資料庫執行查詢(現代請用 mysqli_select_db() + mysqli_query() 或 PDO)
  3. 動態表頭生成:遍歷 SHOW COLUMNS 結果構建 HTML <th>,自動適應任何表結構
  4. 通用入口參數:所有功能頁透過 tablename 參數串聯,實現單一入口管理多表

環境需求與執行注意

  • PHP 5.x、MySQL 5.x、Apache 2.x(Windows XP 測試通過)
  • 複製代碼時務必刪除每行開頭的 Tab 字元,否則 PHP 5 解析錯誤
  • 資料庫名 $database = "sunsite"、預設表 software 請依實際環境修改
  • 建立測試表:CREATE TABLE software (id INT PRIMARY KEY, name VARCHAR(50), version VARCHAR(20), description TEXT)

安全性警示(重要)

⚠️ 本系列代碼僅供教學示範「動態表結構操作」概念,嚴禁直接用於生產環境。存在 SQL 注入、XSS、CSRF、權限繞過、資料完整性等多重高危漏洞。

現代化架構建議

  • 採用 PDO + 預處理語句 徹底杜絕注入
  • 建立 TableManager 類別封裝:getColumns()、getPrimaryKey()、selectAll()、insert()、update()、delete()
  • 引入 白名單機制:僅允許管理預定義的資料表清單
  • 整合 RBAC 權限:不同角色可見/可操作的表與欄位不同
  • 使用 DataTables.js 或 Vue/React Table 組件 替換原生 HTML 表格,支援排序、分頁、搜尋、匯出

總結

本文奠定了「動態資料表管理」的基礎架構:index.php 選表 → tables.php 列表 + 操作入口 → 各功能頁透過 tablename 參數串聯。核心在於善用 SHOW COLUMNS 獲取中繼資料,實現代碼與表結構解耦。後續三篇將完善增刪改功能,並深入剖析安全重構方案。

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