本文續接函數系列,重點介紹四種不同方式擷取查詢結果列(mysql_fetch_object、mysql_fetch_row),以及欄位名稱查詢與欄位指標控制函數。
object mysql_fetch_object(int result [, int result_type])
result_type 可為 MYSQL_ASSOC、MYSQL_NUM、MYSQL_BOTH(預設)。mysql_fetch_array 相近。<?php
$link = mysql_pconnect("localhost", "user", "pass") or die("連線失敗");
mysql_select_db("stamp_db") or die("選擇資料庫失敗");
$result = mysql_query("SELECT last_name, first_name FROM president") or die("查詢失敗");
while ($row = mysql_fetch_object($result)) {
printf("%s %s<br>", $row->last_name, $row->first_name);
}
mysql_free_result($result);
?>
array mysql_fetch_row(int result)
false。while ($row = mysql_fetch_row($result)) {
printf("%s %s<br>", $row[0], $row[1]);
}
string mysql_field_name(int result, int field_index)
field_index 範圍:0 到 mysql_num_fields()-1for ($i = 0; $i < mysql_num_fields($result); $i++) {
$name = mysql_field_name($result, $i);
echo $name ? "$name<br>" : "無名稱<br>";
}
bool mysql_field_seek(int result, int field_offset)
mysql_fetch_field() 將回傳該欄位資訊。true,失敗回傳 false。<?php
for ($i = 0; $i < mysql_num_fields($result); $i++) {
if (!mysql_field_seek($result, $i)) { echo "指標移動失敗<br>"; continue; }
$meta = mysql_fetch_field($result);
if (!$meta) { echo "無中繼資料<br>"; continue; }
echo "<pre>";
printf("name: %s<br>", $meta->name);
printf("type: %s<br>", $meta->type);
printf("max_length: %s<br>", $meta->max_length);
printf("not_null: %s<br>", $meta->not_null);
printf("primary_key: %s<br>", $meta->primary_key);
printf("unique_key: %s<br>", $meta->unique_key);
printf("blob: %s<br>", $meta->blob);
printf("unsigned: %s<br>", $meta->unsigned);
printf("zerofill: %s<br>", $meta->zerofill);
echo "</pre>";
}
?>
| 函數 | 回傳型態 | 索引方式 | 適用場景 |
|---|---|---|---|
| mysql_fetch_object | 物件 | 字串屬性名 | 物件導向開發、程式碼可讀性優先 |
| mysql_fetch_assoc | 關聯陣列 | 字串鍵值 | 最常用,語意清晰 |
| mysql_fetch_row | 索引陣列 | 數字索引 | 高效能、不需欄位名稱 |
| mysql_fetch_array | 混合陣列 | 數字+字串 | 需同時支援兩種索引 |
同前文,mysql_* 函數已移除,新專案請使用 mysqli_fetch_object()、mysqli_fetch_assoc() 等對應函數。