本文專注於結果集欄位級元數據操作:指針定位、表名、類型、標誌、長度獲取,附完整遍歷代碼與輸出結構說明,為 ORM 構建與結構同步工具提供底層支撐。
| 函數 | 功能 | 返回值說明 |
|---|---|---|
| mysql_field_seek | 設定欄位指針位置 | 成功 TRUE,失敗 FALSE;後續 fetch_field 讀取該位置 |
| mysql_fetch_field | 獲取欄位元數據物件 | 含 name/table/max_length/type/flags/primary_key 等屬性 |
| mysql_field_table | 欄位所屬表名 | 計算欄位返回空串 |
| mysql_field_type | 欄位類型字串 | 如 int, varchar, datetime, blob 等 |
| mysql_field_flags | 欄位標誌集合 | 空格分隔:not_null primary_key unique_key auto_increment 等 |
| mysql_field_len | 欄位最大長度 | 數字,單位字節 |
<?php
$link = mysql_pconnect('localhost', 'user', 'pass');
mysql_select_db('db_name');
$result = mysql_query('SELECT * FROM president');
$cols = mysql_num_fields($result);
for ($i = 0; $i < $cols; $i++) {
// 定位指針(可選,fetch_field 內部會推進)
if (!mysql_field_seek($result, $i)) {
echo "Cannot seek to column $i
";
continue;
}
$meta = mysql_fetch_field($result, $i);
if (!$meta) {
echo "No metadata for column $i
";
continue;
}
echo "<pre>Column $i Metadata:\n";
printf(" name: %s\n", $meta->name);
printf(" table: %s\n", $meta->table);
printf(" type: %s\n", $meta->type);
printf(" max_length: %d\n", $meta->max_length);
printf(" not_null: %s\n", $meta->not_null ? 'YES' : 'NO');
printf(" primary_key: %s\n", $meta->primary_key ? 'YES' : 'NO');
printf(" unique_key: %s\n", $meta->unique_key ? 'YES' : 'NO');
printf(" multiple_key: %s\n", $meta->multiple_key ? 'YES' : 'NO');
printf(" numeric: %s\n", $meta->numeric ? 'YES' : 'NO');
printf(" blob: %s\n", $meta->blob ? 'YES' : 'NO');
printf(" unsigned: %s\n", $meta->unsigned ? 'YES' : 'NO');
printf(" zerofill: %s\n", $meta->zerofill ? 'YES' : 'NO');
echo "</pre>";
}
?>
返回空格分隔的標誌字串,常見值:
not_null:NOT NULL 約束primary_key:主鍵unique_key:唯一索引multiple_key:非唯一索引auto_increment:自增blob:BLOB/TEXT 類型unsigned:無符號數值zerofill:ZEROFILL 屬性binary:BINARY 排序$result = $mysqli->query('SELECT * FROM table');
$finfo = $result->fetch_fields(); // 返回所有欄位元數據陣列
foreach ($finfo as $field) {
echo "Name: $field->name\n";
echo "Type: $field->type\n"; // 數字常數,對應 MYSQLI_TYPE_*
echo "Length: $field->length\n"; // 定義長度
echo "MaxLen: $field->max_length\n"; // 實際最大長度
echo "Flags: $field->flags\n"; // 位掩碼,需用常數判斷
echo "Table: $field->table\n";
}