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

PHP MySQL 數據庫讀取入門示例:連接、查詢、遍歷結果集、錯誤處理

     編輯:PHP 相關知識

教學目標

展示 PHP 連接 MySQL、執行 SELECT 查詢、遍歷結果集的最基礎流程,適合零基礎入門。注意:舊代碼使用已移除的 mysql_* 函數,現代 PHP (7.0+) 必須使用 mysqli 或 PDO。

現代寫法:mysqli 面向對象風格(推薦)

<?php
// 數據庫配置
$host = 'localhost';
$port = 3306;
$user = 'root';
$pass = '9999';
$dbname = 'ok';

// 1. 建立連接
$mysqli = new mysqli($host, $user, $pass, $dbname, $port);
if ($mysqli->connect_errno) {
    die("連接失敗:{$mysqli->connect_error}");
}
$mysqli->set_charset('utf8mb4'); // 重要:設置字符集

// 2. 執行查詢
$sql = "SELECT `id`, `name` FROM `abc`";
$result = $mysqli->query($sql);
if (!$result) {
    die("查詢失敗:{$mysqli->error}");
}

// 3. 遍歷結果集
echo "<table border='1' cellpadding='5'>";
echo "<tr><th>ID</th><th>Name</th></tr>";

while ($row = $result->fetch_assoc()) {
    echo "<tr>";
    echo "<td>" . htmlspecialchars($row['id']) . "</td>";
    echo "<td>" . htmlspecialchars($row['name']) . "</td>";
    echo "</tr>";
}

echo "</table>";

// 4. 釋放結果、關閉連接
$result->free();
$mysqli->close();
?>

現代寫法:PDO(更通用、支援多數據庫)

<?php
$dsn = "mysql:host=localhost;port=3306;dbname=ok;charset=utf8mb4";
$user = 'root';
$pass = '9999';

try {
    $pdo = new PDO($dsn, $user, $pass, [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::ATTR_EMULATE_PREPARES => false, // 使用真實預處理
    ]);

    $sql = "SELECT `id`, `name` FROM `abc`";
    $stmt = $pdo->query($sql);

    echo "<table border='1' cellpadding='5'>";
    echo "<tr><th>ID</th><th>Name</th></tr>";

    foreach ($stmt as $row) {
        echo "<tr>";
        echo "<td>" . htmlspecialchars($row['id']) . "</td>";
        echo "<td>" . htmlspecialchars($row['name']) . "</td>";
        echo "</tr>";
    }
    echo "</table>";

} catch (PDOException $e) {
    die("數據庫錯誤:" . $e->getMessage());
}
?>

舊代碼對照(僅供理解歷史項目)

<?php
// ⚠️ 已棄用,PHP 7.0+ 已移除
$dbh = @mysql_connect("localhost:3306", "root", "9999");
if (!$dbh) die("error");
@mysql_select_db("ok", $dbh);
$q = "SELECT * FROM abc";
$rs = mysql_query($q, $dbh);
if (!$rs) die("Valid result!");

echo "<table><tr><td>ID</td><td>Name</td></tr>";
while ($row = mysql_fetch_row($rs)) {
    echo "<tr><td>$row[0]</td><td>$row[1]</td></tr>";
}
?>

關鍵差異對比

特性mysql_* (舊)mysqliPDO
PHP 版本支援≤ 5.65.0+5.1+
預處理語句無支援支援
多數據庫無僅 MySQL支援 12+ 驅動
面向對象無支援支援
異常處理無可選原生支援

安全最佳實踐(必讀)

  1. 永遠使用預處理語句:任何用戶輸入進入 SQL 必須通過 prepare() + bind_param() / execute([...]),防止 SQL 注入。
  2. 字符集設置 utf8mb4:支援 Emoji、完整 Unicode。
  3. 錯誤模式設置為異常:PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,避免靜默失敗。
  4. 最小權限原則:數據庫用戶僅授予必要權限(SELECT/INSERT/UPDATE),無 DROP/GRANT。
  5. 輸出轉義:HTML 輸出時使用 htmlspecialchars() 防 XSS。

預處理語句示例(帶參數查詢)

<?php
// mysqli
$stmt = $mysqli->prepare("SELECT `id`, `name` FROM `abc` WHERE `id` > ?");
$minId = 5;
$stmt->bind_param('i', $minId);
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) { ... }

// PDO
$stmt = $pdo->prepare("SELECT `id`, `name` FROM `abc` WHERE `id` > :min_id");
$stmt->execute(['min_id' => 5]);
foreach ($stmt as $row) { ... }
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved