mysql_fetch_assoc() 從結果集取得一行並以**欄位名為鍵**的關聯陣列回傳,是處理查詢結果最常用的函數之一(舊 mysql 擴展)。
array mysql_fetch_assoc(resource $result)
<?php
$user = 'abc'; $pass = '1234';
$db = mysql_connect('localhost', $user, $pass);
if (!$db) die('無法連線資料庫');
mysql_select_db('w3db', $db);
mysql_query("SET NAMES utf8", $db);
$query = "SELECT ISBN, Title, Author FROM articles";
$res = mysql_query($query, $db);
while ($row = mysql_fetch_assoc($res)) {
echo "ISBN = {$row['ISBN']}<br>\n";
echo "Title = {$row['Title']}<br>\n";
echo "Author = {$row['Author']}<br>\n";
}
mysql_free_result($res);
mysql_close($db);
?>
mysql_* 函數已於 PHP 7.0 移除。新專案請使用 MySQLi 或 PDO:
$mysqli = new mysqli('localhost', 'user', 'pass', 'db');
$res = $mysqli->query("SELECT ISBN, Title, Author FROM articles");
while ($row = $res->fetch_assoc()) { /* ... */ }
$res->free();
$pdo = new PDO("mysql:host=localhost;dbname=db;charset=utf8", 'user', 'pass');
$stmt = $pdo->query("SELECT ISBN, Title, Author FROM articles");
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { /* ... */ }
mysql_fetch_assoc():僅回傳**關鍵字索引**(欄位名)。mysql_fetch_array($result, MYSQL_ASSOC):相同效果。mysql_fetch_array($result, MYSQL_BOTH):同時有數值索引 (0,1,2...) 與關鍵字索引,**記憶體佔用雙倍**。習慣使用關鍵字索引存取欄位,程式碼可讀性高、不易因欄位順序變動出錯。現代專案請直接用 PDO::FETCH_ASSOC 或 mysqli_fetch_assoc()。