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

PHP 連接 MySQL 及讀寫操作完整代碼範例與最佳實踐

     編輯:PHP 相關知識

PHP 連接 MySQL 及讀寫操作完整代碼範例與最佳實踐

雖然 ext/mysql 已於 PHP 7.0 移除,但大量存量專案仍在使用。本文提供經典 mysql_* 函數的標準用法,並**強烈建議新專案改用 PDO 或 MySQLi**(支援預處理語句、物件導向、更安全)。

1. 設定檔分離 (config.php)

<?php
define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PASS', '123456');
define('DB_NAME', 'my_database');
define('DB_CHARSET', 'utf8mb4');

2. 連接資料庫並設定字元集

require 'config.php';

$conn = mysql_connect(DB_HOST, DB_USER, DB_PASS)
    or die('資料庫連線失敗: ' . mysql_error());

mysql_query("SET NAMES " . DB_CHARSET); // 關鍵:防止中文亂碼
mysql_select_db(DB_NAME, $conn) or die('選擇資料庫失敗');

3. 讀取資料 (SELECT)

$sql = "SELECT id, title, content, created_at FROM news ORDER BY id DESC";
$result = mysql_query($sql, $conn);

if (!$result) {
    die('查詢失敗: ' . mysql_error());
}

while ($row = mysql_fetch_assoc($result)) { // 關聯陣列,語意清晰
    echo "<div class='news-item'>";
    echo "<h3>" . htmlspecialchars($row['title']) . "</h3>";
    echo "<div>" . $row['content'] . "</div>"; // 富文本內容直接輸出
    echo "<span>" . date('Y-m-d H:i', strtotime($row['created_at'])) . "</span>";
    echo "</div>";
}

mysql_free_result($result); // 釋放記憶體

4. 寫入資料 (INSERT)

$title   = mysql_real_escape_string($_POST['title']);
$content = mysql_real_escape_string($_POST['content']); // 必須轉義防注入
$enabled = 1;
$date    = date('Y-m-d');

$sql = "INSERT INTO messageboard (title, content, enabled, created_at)
        VALUES ('$title', '$content', $enabled, '$date')";

if (mysql_query($sql, $conn)) {
    $newId = mysql_insert_id($conn);
    echo "新增成功,ID: $newId";
} else {
    echo '新增失敗: ' . mysql_error();
}

mysql_close($conn);

⚠️ 必須知道的安全與效能要點

  • SQL 注入防護:所有外來資料入庫前**必須**經 mysql_real_escape_string(),或改用預處理語句 (PDO/MySQLi)
  • 字元集一致性:資料庫、表、欄位、連線、PHP 檔案編碼、HTML meta charset **全部統一 utf8mb4**
  • 錯誤處理:生產環境關閉 display_errors,啟用錯誤日誌,避免洩露 SQL 結構
  • 資源釋放:大量查詢後呼叫 mysql_free_result(),腳本結束前 mysql_close()

🚀 現代化遷移建議:改用 PDO

$pdo = new PDO(
    "mysql:host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET,
    DB_USER, DB_PASS,
    [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
);

// 查詢
$stmt = $pdo->query("SELECT * FROM news");
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { ... }

// 新增 (預處理)
$stmt = $pdo->prepare("INSERT INTO messageboard (title, content) VALUES (?, ?)");
$stmt->execute([$title, $content]);
$newId = $pdo->lastInsertId();

PDO 提供:預處理語句防注入、統一 API 支援多種資料庫、物件導向風格、更好的錯誤處理機制。

常見問答

Q: 如何將 txt 檔案資料批次匯入 MySQL?
A: file_get_contents() 讀取 → explode("\r\n", $str) 分行 → 迴圈 INSERT 或組裝批次 INSERT ... VALUES (...), (...),注意轉義與交易控制。
Q: mysql_connect() 與 mysql_pconnect() 差別?
A: pconnect 建立持久連線,腳本結束不關閉,下次請求複用,減少連線開銷;但易導致連線數耗盡,現代高併發環境**不建議使用**。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved