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

PHP 與 MySQL 互動完整指南:連線封裝、建表、資料新增與錯誤處理

     編輯:PHP 綜合知識

一、統一連線與工具函式庫 connect.inc

將資料庫連線、輸入處理、HTML 模板、錯誤處理集中管理,所有腳本以 require('connect.inc') 載入。

<?php
// 連線設定
$hostname = 'localhost';
$username = 'phpstar';
$password = 'phpstar';
$dbname   = 'script';
$tablename = 'php_script';

$link_id = mysql_connect($hostname, $username, $password);
if (!$link_id) {
    die('<html><body>資料庫連線失敗</body></html>');
}

// 統一處理 GET/POST 輸入,鍵名轉小寫存入 $arr_request
$arr_request = [];
if (count($_GET)) {
    foreach ($_GET as $k => $v) $arr_request[strtolower($k)] = $v;
}
if (count($_POST)) {
    foreach ($_POST as $k => $v) $arr_request[strtolower($k)] = $v;
}

// HTML 模板函式
function html_header($title) {
    echo "<html><head><title>$title</title></head><body bgcolor='#CCCCCC'>";
}
function html_footer() {
    global $link_id;
    mysql_close($link_id);
    echo "</body></html>";
}
function html_error_exit($msg) {
    echo "<html><body>$msg<br>Error: (" . mysql_errno() . ") " . mysql_error() . "</body></html>";
    exit();
}
?>

二、程式建立資料表 createTable.php

<?php
require('connect.inc');

$sql = "CREATE TABLE php_script (
    key_script INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    date_created DATETIME DEFAULT '0000-00-00 00:00:00',
    date_updated DATETIME DEFAULT '0000-00-00 00:00:00',
    flag_deleted ENUM('Y','N') DEFAULT 'N' NOT NULL,
    script_name VARCHAR(20) NOT NULL,
    script_size VARCHAR(10) NOT NULL,
    script_describe VARCHAR(200) NOT NULL,
    author_name VARCHAR(20) NOT NULL,
    author_email VARCHAR(20) NOT NULL,
    author_homepage VARCHAR(30) NOT NULL,
    PRIMARY KEY (key_script)
)";
$result = mysql_db_query($dbname, $sql, $link_id);
echo $result ? "ok! Table $tablename created!" : "Failed!";
?>

三、新增記錄 script_insert_action.php - 關鍵:變數解構避免引號衝突

<?php
require('connect.inc');

if ($arr_request['action'] === 'insert') {
    $current_date = date('Y-m-d H:i:s');

    // 將陣列元素解構為獨立變數,避免 SQL 字串中單引號嵌套問題
    $script_name        = $arr_request['script_name'];
    $script_size        = $arr_request['script_size'];
    $script_describe    = $arr_request['script_describe'];
    $author_name        = $arr_request['author_name'];
    $author_email       = $arr_request['author_email'];
    $author_homepage    = $arr_request['author_homepage'];

    $sql = "INSERT INTO $tablename 
        (date_created, date_updated, script_name, script_size, script_describe,
         author_name, author_email, author_homepage)
        VALUES 
        ('$current_date', '$current_date', '$script_name', '$script_size',
         '$script_describe', '$author_name', '$author_email', '$author_homepage')";

    $result = mysql_db_query($dbname, $sql, $link_id);
    if (!$result) {
        html_error_exit('MySQL 插入失敗!');
    } else {
        html_header('成功');
        echo "<center>MySQL 插入命令成功<br></center>";
        html_footer();
    }
}
?>

四、關鍵技術點總結

  1. 連線複用:connect.inc 讓每支腳本自動建立連線並關閉,避免重複代碼。
  2. 輸入正規化:統一將 $_GET/$_POST 鍵名轉小寫存入 $arr_request,後續程式碼大小寫不敏感。
  3. 變數解構法:插入 SQL 時先將陣列值指派給獨立變數,再以 '$var' 置入字串,解決「陣列鍵名含單引號導致字串終止」的經典問題。現代寫法應改用預處理語句(mysqli_prepare/PDO::prepare)徹底杜絕 SQL 注入。
  4. 錯誤統一處理:html_error_exit() 同時輸出錯誤代碼與訊息,利於除錯。

五、現代化遷移建議

  • 全面改用 PDO 或 mysqli,啟用預處理語句。
  • 密碼儲存採用 password_hash() / password_verify()。
  • 引入 PSR-4 自動載入、依賴注入容器 管理資料庫連線物件。
  • 加入 資料庫遷移工具(如 Phinx)管理 schema 版本。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved