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

PHP 與 MySQL 基礎操作實例:連線、建表、資料寫入(mysqli 版)

     編輯:PHP 相關知識

早期教學常使用已棄用的 mysql_* 函式,現代 PHP 應改用 mysqli 或 PDO。本文以 mysqli 物件導向風格,示範資料庫連線、建立資料表、預處理寫入與錯誤處理的標準流程,並說明為何不應再使用舊 API。

完整程式碼(mysqli OOP)

<?php
// 1. 連線設定(建議從環境變數或設定檔讀取)
$host = '127.0.0.1';
$user = 'root';
$pass = 'your_strong_password';
$dbname = 'testdb';
$port = 3306;

// 2. 建立連線
$mysqli = new mysqli($host, $user, $pass, $dbname, $port);

if ($mysqli->connect_errno) {
    // 生產環境請記錄日誌,不要直接輸出給使用者
    error_log("MySQL 連線失敗: {$mysqli->connect_error}");
    exit('資料庫連線失敗,請稍後再試');
}

// 3. 設定字元集(防止中文亂碼)
$mysqli->set_charset('utf8mb4');

// 4. 建立資料表(使用 IF NOT EXISTS 避免重複執行報錯)
$sql = <<query($sql)) {
    error_log("建表失敗: {$mysqli->error}");
    exit('建立資料表失敗');
}

// 5. 使用預處理寫入資料(防止 SQL 注入)
$stmt = $mysqli->prepare("INSERT INTO `Persons` (`FirstName`, `LastName`, `Age`) VALUES (?, ?, ?)");
$stmt->bind_param('ssi', $first, $last, $age);

$data = [
    ['John', 'Doe', 28],
    ['Jane', 'Smith', 32],
    ['Bob', 'Johnson', 45],
];

foreach ($data as [$first, $last, $age]) {
    if (!$stmt->execute()) {
        error_log("寫入失敗: {$stmt->error}");
    }
}
$stmt->close();

echo "成功寫入 {$mysqli->affected_rows} 筆資料。";

// 6. 關閉連線(腳本結束會自動關閉,顯式關閉較好)
$mysqli->close();
?>

關鍵步驟解析

  1. 連線物件建立:new mysqli() 回傳物件,即使連線失敗也會回傳物件,必須檢查 connect_errno。
  2. 字元集設定:set_charset('utf8mb4') 必須在查詢前呼叫,確保儲存/讀取 emoji 等 4-byte 字元正常。
  3. 預處理:prepare() → bind_param() → execute() 三步驟,將資料與 SQL 邏輯分離,徹底防禦注入。
  4. 型別指定字串:'ssi' 對應 string, string, integer,必須與欄位型別一致。
  5. 錯誤處理:開發環境可 mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT) 直接拋出例外;生產環境建議自訂錯誤處理器記錄日誌。

為何棄用 mysql_* 函式?

項目mysql_* (PHP 5.5 棄用, 7.0 移除)mysqli / PDO
支援狀態已移除核心內建,持續維護
預處理不支援完整支援
物件導向無完整支援
多重查詢不支援支援 multi_query()
交易控制不支援支援 begin_transaction() 等
準備好的語句無支援

進階:交易與批次寫入

$mysqli->begin_transaction();
try {
    $stmt = $mysqli->prepare("INSERT INTO `Persons` (`FirstName`, `LastName`, `Age`) VALUES (?, ?, ?)");
    $stmt->bind_param('ssi', $first, $last, $age);

    foreach ($largeDataset as $row) {
        [$first, $last, $age] = $row;
        $stmt->execute();
    }

    $mysqli->commit();
    echo "交易提交成功,共 {$stmt->affected_rows} 筆";
} catch (Exception $e) {
    $mysqli->rollback();
    error_log("交易回滾: {$e->getMessage()}");
}
$stmt->close();

掌握 mysqli 核心 API、預處理模式與錯誤處理,是 PHP 後端開發的基本功。新專案請直接使用 mysqli 或 PDO,勿再參考舊式 mysql_* 範例。

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