PHP 早期內建 mysql 擴展(PHP 7.0 移除)的官方文檔精簡版。現代開發請使用 mysqli 或 PDO_MySQL,本文僅供維護舊代碼參考。
資源類型
- 連接資源:
mysql_connect()/mysql_pconnect() 返回,標識與 MySQL 服務器的會話
- 結果集資源:
mysql_query() 成功返回,供 mysql_fetch_* 族函數遍歷
預定義常量
客戶端標記 (mysql_connect() 第 5 參數)
| 常量 | 說明 |
MYSQL_CLIENT_COMPRESS | 壓縮協議傳輸 |
MYSQL_CLIENT_IGNORE_SPACE | 允許函數名後有空格 |
MYSQL_CLIENT_INTERACTIVE | 使用 interactive_timeout 替代 wait_timeout |
MYSQL_CLIENT_SSL | SSL 加密連接(需客戶端庫 4.x+,Win 版 PHP 綁定 3.23.x 不支援) |
結果集獲取模式 (mysql_fetch_array() 第 2 參數)
| 常量 | 返回結構 |
MYSQL_ASSOC | 關聯數組 ['col_name' => 'value'] |
MYSQL_NUM | 數字索引數組 [0 => 'value'] |
MYSQL_BOTH | 兩者合併(預設) |
核心函數速查表(按功能分組)
連接管理
mysql_connect(host, user, pass, new_link, client_flags) // 新連接
mysql_pconnect(...) // 持久連接
mysql_close(link) // 關閉
mysql_select_db(db, link) // 選庫
mysql_ping(link) // 檢查/重連
查詢執行
mysql_query(sql, link) // 執行,返回結果集/布爾
mysql_unbuffered_query(sql, link) // 不緩存結果,節省記憶體
mysql_db_query(db, sql, link) // 選庫並查詢(不推薦)
mysql_real_escape_string(str, link) // 轉義(注意:需連接上下文)
結果集遍歷
mysql_fetch_array(result, type) // 關聯+數字
mysql_fetch_assoc(result) // 僅關聯
mysql_fetch_row(result) // 僅數字
mysql_fetch_object(result) // 對象
mysql_fetch_field(result, offset) // 字段元數據對象
mysql_data_seek(result, row) // 移動內部指針
mysql_num_rows(result) // 行數
mysql_num_fields(result) // 列數
mysql_free_result(result) // 釋放記憶體
字段元數據
mysql_field_name(result, index)
mysql_field_type(result, index)
mysql_field_len(result, index)
mysql_field_flags(result, index)
mysql_field_table(result, index)
mysql_field_seek(result, offset)
事務/狀態/信息
mysql_affected_rows(link) // 影響行數
mysql_insert_id(link) // 自增ID
mysql_errno(link) // 錯誤碼
mysql_error(link) // 錯誤訊息
mysql_info(link) // 最近查詢信息
mysql_stat(link) // 服務器狀態
mysql_get_server_info(link) // 版本
mysql_get_host_info(link)
mysql_get_proto_info(link)
mysql_get_client_info()
資料庫/表/字段列表
mysql_list_dbs(link)
mysql_list_tables(db, link)
mysql_list_fields(db, table, link)
mysql_list_processes(link)
mysql_db_name(result, row)
mysql_tablename(result, row)
mysql_result(result, row, field)
經典範例:連接→查詢→輸出→清理
<?php
$link = mysql_connect('localhost', 'user', 'pass') or die('Connect failed: ' . mysql_error());
mysql_select_db('mydb') or die('Select db failed: ' . mysql_error());
$query = 'SELECT id, name, email FROM users WHERE status = 1';
$result = mysql_query($query) or die('Query failed: ' . mysql_error());
echo "<table>\n";
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
echo "\t<tr>\n";
foreach ($row as $val) {
echo "\t\t<td>" . htmlspecialchars($val) . "</td>\n";
}
echo "\t</tr>\n";
}
echo "</table>\n";
mysql_free_result($result);
mysql_close($link);
?>
遷移指南:mysql → mysqli / PDO
| 舊函數 | mysqli (面向對象) | PDO |
mysql_connect() | new mysqli() | new PDO() |
mysql_query() | $mysqli->query() / prepare() | $pdo->query() / prepare() |
mysql_fetch_array() | $result->fetch_assoc() | $stmt->fetch(PDO::FETCH_ASSOC) |
mysql_real_escape_string() | $mysqli->real_escape_string() | $pdo->quote() (或預處理) |
mysql_insert_id() | $mysqli->insert_id | $pdo->lastInsertId() |
mysql_error() | $mysqli->error | $pdo->errorInfo() |
強制遷移提醒:PHP 7.0+ 完全移除 mysql 擴展。舊專案必須升級至 mysqli(程序風格兼容性最好)或 PDO(跨數據庫、更現代)。