⚠️ 重要警示
mysql_* 系列函數自 PHP 5.5.0 棄用,PHP 7.0.0 完全移除。 新項目**必須使用 mysqli 或 PDO_MySQL**。本文僅供維護老項目參考。
函數分類速查表
| 分類 | 代表函數 |
| 連接管理 | mysql_connect, mysql_pconnect, mysql_close, mysql_select_db |
| 查詢執行 | mysql_query, mysql_db_query, mysql_unbuffered_query |
| 結果集遍歷 | mysql_fetch_array, mysql_fetch_row, mysql_fetch_object, mysql_fetch_assoc, mysql_data_seek, mysql_num_rows, mysql_num_fields |
| 結果集釋放 | mysql_free_result |
| 字段元數據 | mysql_fetch_field, mysql_field_name, mysql_field_type, mysql_field_len, mysql_field_flags, mysql_field_table, mysql_field_seek |
| 錯誤處理 | mysql_errno, mysql_error |
| 事務/自增 ID | mysql_insert_id, mysql_affected_rows |
| 庫/表列表 | mysql_list_dbs, mysql_list_tables, mysql_list_fields, mysql_tablename |
| DDL 封裝 | mysql_create_db, mysql_drop_db |
| 單值獲取 | mysql_result |
核心函數詳解(高頻使用)
mysql_connect / mysql_pconnect
$link = mysql_connect('host:port', 'user', 'pass', true, MYSQL_CLIENT_SSL);
// 參數:主機:端口、用戶、密碼、new_link(強制新連接)、client_flags
// pconnect:持久連接,進程結束不關閉,慎用(連接泄漏風險)
mysql_query
$res = mysql_query('SELECT * FROM t', $link);
// 返回:資源句柄(SELECT/SHOW/DESC) 或 true/false(INSERT/UPDATE/DELETE)
// false 表示 SQL 錯誤,需配合 mysql_errno/error 排查
結果集遍歷三剑客
| 函數 | 返回 | 索引類型 | 適用場景 |
mysql_fetch_row | 數組 | 數字 0-based | 極簡、性能略優 |
mysql_fetch_assoc | 數組 | 關聯鍵名 | 語義清晰,推薦 |
mysql_fetch_array | 數組 | 雙模式 (MYSQL_BOTH 默認) | 兼容舊碼,可指定 MYSQL_NUM/ASSOC |
mysql_fetch_object | 對象 | 屬性名 | 面向對象風格 |
while ($row = mysql_fetch_assoc($res)) {
echo $row['id'], $row['name'];
}
mysql_free_result($res); // 及時釋放
錯誤處理模式
mysql_query($sql) or die('Query failed: ' . mysql_error() . ' (Code: ' . mysql_errno() . ')');
事務相關(需 InnoDB)
mysql_query('SET AUTOCOMMIT=0');
mysql_query('BEGIN');
mysql_query('INSERT ...');
mysql_query('COMMIT'); // 或 ROLLBACK
注意: mysql_* 無原生事務函數,靠手動發送 SQL 實現。
遷移指引:mysqli / PDO 對照
| mysql_* | mysqli (面向對象) | PDO |
| mysql_connect | new mysqli() | new PDO() |
| mysql_query | $mysqli->query() | $pdo->query() |
| mysql_fetch_assoc | $res->fetch_assoc() | $stmt->fetch(PDO::FETCH_ASSOC) |
| mysql_prepare | $mysqli->prepare() | $pdo->prepare() |
| mysql_real_escape_string | $mysqli->real_escape_string() | 參數綁定自動防注入 |
| mysql_insert_id | $mysqli->insert_id | $pdo->lastInsertId() |
| mysql_affected_rows | $mysqli->affected_rows | $stmt->rowCount() |
推薦資源
- 官方文檔:mysqli / PDO
- 圖形管理工具:phpMyAdmin(PHP 寫成,可二次開發學習)。