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

PHP MySQL 基礎查詢教程:連接、查詢、結果遍歷完整示例

     編輯:PHP 相關知識

完整示例代碼

共有 $numRows 位女性用戶

"; // 6. 遍歷結果集 echo ""; echo ""; while ($row = mysql_fetch_row($result)) { echo ""; foreach ($row as $field) { // stripslashes 處理魔術引號(舊版本需要) echo ""; } echo ""; } echo "
ID域名性別註冊時間
" . htmlspecialchars(stripslashes($field)) . "
"; // 7. 釋放結果集 mysql_free_result($result); // 8. 關閉連接 mysql_close($link); ?>

核心函數詳解

函數用途返回值
mysql_connect()建立數據庫連接連接資源 / false
mysql_select_db()選擇默認數據庫bool
mysql_query()執行 SQL 語句結果資源 / bool / false
mysql_num_rows()獲取 SELECT 結果行數int
mysql_fetch_row()獲取一行數值索引數組array / false
mysql_fetch_array()獲取一行關聯+數值數組array / false
mysql_fetch_assoc()獲取一行關聯數組array / false
mysql_fetch_object()獲取一行對象object / false
mysql_free_result()釋放結果集內存bool
mysql_close()關閉數據庫連接bool

四種遍歷方式對比

, 'username'=>]
while ($row = mysql_fetch_assoc($result)) {
    echo "ID: {$row['id']}, User: {$row['username']}";
}

// 3. mysql_fetch_array() - 兩者兼有(默認 MYSQL_BOTH)
while ($row = mysql_fetch_array($result)) {
    // 同時可以用 $row[0] 和 $row['id']
    // 內存佔用較大
}

// 4. mysql_fetch_object() - 對象屬性訪問
while ($row = mysql_fetch_object($result)) {
    echo "ID: $row->id, User: $row->username";
    // 字段名區分大小寫
}

常見錯誤與修正

錯誤代碼問題修正
mysql_query() 後直接用 $row未遍歷結果集必須用 while 循環 fetch
mysql_num_rows() 用在 INSERT/UPDATE僅適用 SELECT用 mysql_affected_rows()
忘記 mysql_free_result()大結果集內存洩漏用完及時釋放
直接輸出數據庫字段XSS 風險htmlspecialchars() 轉義
SQL 拼接變量未轉義SQL 注入mysql_real_escape_string()

現代化重寫:PDO 版本

 PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
]);

try {
    $stmt = $pdo->query("SELECT * FROM domains WHERE sex = 'F'");
    $rows = $stmt->fetchAll();
    
    echo "

共有 " . count($rows) . " 位女性用戶

"; echo ""; foreach ($rows as $row) { echo ""; foreach ($row as $field) { echo ""; } echo ""; } echo "
ID域名性別註冊時間
" . htmlspecialchars($field) . "
"; } catch (PDOException $e) { error_log("Database error: " . $e->getMessage()); die("查詢失敗,請稍後重試"); }

mysqli 版本(面向過程風格,易遷移)

connect_errno) {
    die("連接失敗: " . $mysqli->connect_error);
}
$mysqli->set_charset('utf8mb4');

$sql = "SELECT * FROM domains WHERE sex = 'F'";
$result = $mysqli->query($sql);

if ($result) {
    echo "

共有 $result->num_rows 位女性用戶

"; echo ""; while ($row = $result->fetch_assoc()) { echo ""; foreach ($row as $field) { echo ""; } echo ""; } echo "
ID域名性別註冊時間
" . htmlspecialchars($field) . "
"; $result->free(); } $mysqli->close();

遷移建議

  1. 新項目:直接使用 PDO(面向對象、支持多數據庫、預處理)
  2. 舊項目維護:逐步替換 mysql_* 為 mysqli_*(函數名幾乎對應)
  3. 統一封裝:編寫 Database 類隱藏底層差異
  4. 測試覆蓋:遷移前編寫集成測試確保功能一致
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved