PHP 與 MySQL 是經典組合。本文系統整理使用傳統 mysql_* 函數查詢資料的完整流程,並說明現代替代方案。
<?php
// 1. 連線資料庫
$hostname = 'localhost';
$username = 'root';
$password = '';
$link = mysql_connect($hostname, $username, $password);
if (!$link) {
die('連線失敗: ' . mysql_error());
}
// 2. 設定字元編碼 (支援中文)
mysql_query('SET NAMES utf8');
// 3. 選擇資料庫
mysql_select_db('test');
// 4. 執行查詢
$query = "SELECT * FROM friends";
$result = mysql_query($query);
if (!$result) {
die('查詢失敗: ' . mysql_error());
}
// 5. 逐行處理結果
while ($row = mysql_fetch_array($result)) {
echo "ID: {$row['id']}
";
echo "姓名: {$row['name']}
";
echo "性別: {$row['sex']}
";
echo "生日: {$row['birthday']}
";
echo "地址: {$row['address']}
";
}
// 6. 釋放結果集記憶體
mysql_free_result($result);
// 7. 關閉連線 (腳本結束會自動關閉)
mysql_close($link);
?>
| 函數 | 回傳格式 | 適用場景 |
|---|---|---|
| mysql_fetch_row() | 數值索引陣列 [0,1,2...] | 效能最佳,不需欄位名 |
| mysql_fetch_assoc() | 關聯陣列 ['id'=>1, 'name'=>'A'] | 程式碼可讀性最好 |
| mysql_fetch_array() | 雙重陣列 (數值+關聯) | 預設行為,記憶體較大 |
| mysql_fetch_object() | 物件 $row->id | 物件導向風格 |
<?php
// 條件查詢
$query = "SELECT * FROM friends WHERE id = 1";
$result = mysql_query($query);
// 直接取得特定欄位值 (不需 fetch 整列)
$name = mysql_result($result, 0, 'name');
$birthday = mysql_result($result, 0, 'birthday');
$sex = mysql_result($result, 0, 'sex');
echo "姓名: $name
生日: $birthday
性別: $sex
";
?>
<?php
$conn = mysql_connect('localhost', 'root', '');
$fields = mysql_list_fields('test', 'friends', $conn);
$cols = mysql_num_fields($fields);
echo "欄位總數: $cols
";
for ($i = 0; $i < $cols; $i++) {
echo "欄位名: " . mysql_field_name($fields, $i) . "
";
echo "型態: " . mysql_field_type($fields, $i) . "
";
echo "長度: " . mysql_field_len($fields, $i) . "
";
}
?>
PHP 5.5.0 起棄用,PHP 7.0.0 起移除。 新專案請勿使用。
現代替代方案:
<?php
$mysqli = new mysqli('localhost', 'root', '', 'test');
if ($mysqli->connect_errno) die('連線失敗: ' . $mysqli->connect_error);
$mysqli->set_charset('utf8');
$result = $mysqli->query("SELECT * FROM friends");
while ($row = $result->fetch_assoc()) {
echo "{$row['name']}
";
}
$result->free();
$mysqli->close();
?>