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

MySQL 獲取結果集三函數關係:fetch_assoc + fetch_row = fetch_array

     編輯:PHP 綜合知識

PHP mysql 擴展(及 mysqli/PDO)提供三種獲取行的函數,其關係可總結為:

對照表

函數返回結構等價於適用場景
mysql_fetch_assoc()關聯數組 ['col' => 'val']mysql_fetch_array($res, MYSQL_ASSOC)業務代碼推薦,語義清晰
mysql_fetch_row()數字索引數組 [0 => 'val']mysql_fetch_array($res, MYSQL_NUM)性能敏感、列順序固定
mysql_fetch_array()雙重結構 ['col' => 'val', 0 => 'val']MYSQL_BOTH (預設)兼容舊代碼、調試輸出
mysql_fetch_object()對象 $obj->col—OOP 風格、實體映射

性能與記憶體差異

  • fetch_row 最快、記憶體最少(無鍵名字符串開銷)
  • fetch_assoc 次之,鍵名來自字段名
  • fetch_array(MYSQL_BOTH) 最慢、佔用雙倍鍵名記憶體,**生產環境避免使用預設值**

現代 mysqli / PDO 寫法

<?php
// mysqli
$stmt = $mysqli->prepare('SELECT id, name FROM users WHERE status = ?');
$stmt->bind_param('i', 1);
$stmt->execute();
$res = $stmt->get_result();

while ($row = $res->fetch_assoc()) { ... }  // 推薦
// $row = $res->fetch_row();
// $row = $res->fetch_array(MYSQLI_ASSOC);

// PDO
$stmt = $pdo->prepare('SELECT id, name FROM users WHERE status = ?');
$stmt->execute([1]);
$stmt->setFetchMode(PDO::FETCH_ASSOC);  // 預設模式
while ($row = $stmt->fetch()) { ... }

最佳實踐建議

  1. 明確指定獲取模式:不要依賴預設 MYSQL_BOTH/PDO::FETCH_BOTH
  2. 統一使用關聯數組:FETCH_ASSOC / fetch_assoc(),代碼可讀性最高
  3. 大數據集用生成器迭代:yield $stmt->fetch() 避免一次性載入所有行
  4. 釋放結果集:循環結束後 $res->free() / $stmt->closeCursor()
原文一句話總結精準:mysql_fetch_assoc 和 mysql_fetch_row 的功能加起來就是 mysql_fetch_array(預設模式)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved