本文系統整理 PHP 開發中常用的 MySQL 資料庫操作函數,分類說明用法、參數、回傳值與範例。注意:mysql_* 函數已於 PHP 7.0 移除,新專案請使用 MySQLi 或 PDO。
resource mysql_connect(string $server, string $username, string $password, bool $new_link = false, int $client_flags = 0)
腳本結束自動關閉,除非先呼叫 mysql_close()。持久連線請用 mysql_pconnect()。
<?php
$con = mysql_connect('localhost', 'mysql_user', 'mysql_pwd');
if (!$con) die('連線失敗: ' . mysql_error());
// 執行查詢...
mysql_close($con);
?>
bool mysql_select_db(string $database_name, resource $link_identifier = null)
<?php
mysql_select_db('my_database', $con) or die(mysql_error($con));
?>
resource|bool mysql_query(string $query, resource $link_identifier = null)
<?php
$query = "SELECT * FROM users WHERE status = 1";
$result = mysql_query($query, $con) or die(mysql_error($con));
?>
array|false mysql_fetch_row(resource $result)
回傳當前列的數值陣列,內部指標移至下一列。
<?php
while ($row = mysql_fetch_row($result)) {
echo "ID: $row[0], Name: $row[1]
";
}
?>
array|false mysql_fetch_assoc(resource $result)
等同 mysql_fetch_array($result, MYSQL_ASSOC),鍵為欄位名。
array|false mysql_fetch_array(resource $result, int $result_type = MYSQL_BOTH)
$result_type:MYSQL_ASSOC、MYSQL_NUM、MYSQL_BOTH (預設)。
object|false mysql_fetch_object(resource $result, string $class_name = "stdClass", array $params = [])
object|false mysql_fetch_field(resource $result, int $field_offset = 0)
回傳物件屬性:name, table, max_length, not_null, primary_key, unique_key, multiple_key, numeric, blob, type, unsigned, zerofill, def。
<?php
while ($field = mysql_fetch_field($result)) {
echo "欄位: {$field->name}, 型態: {$field->type}, 長度: {$field->max_length}
";
}
?>
resource mysql_list_tables(string $database, resource $link_identifier = null)
<?php
$result = mysql_list_tables('my_db');
while ($row = mysql_fetch_row($result)) {
echo $row[0] . "
";
}
?>
resource mysql_list_fields(string $database_name, string $table_name, resource $link_identifier = null)
<?php
$fields = mysql_list_fields('my_db', 'users');
$cols = mysql_num_fields($fields);
for ($i = 0; $i < $cols; $i++) {
echo mysql_field_name($fields, $i) . "
";
}
?>
| 函數 | 用途 | 範例 |
|---|---|---|
| mysql_num_rows($result) | SELECT 結果列數 | $num = mysql_num_rows($result); |
| mysql_affected_rows($link) | INSERT/UPDATE/DELETE 影響列數 | $num = mysql_affected_rows($con); |
| mysql_num_fields($result) | 結果欄位數 | $cols = mysql_num_fields($result); |
| mysql_insert_id($link) | 最後 AUTO_INCREMENT ID | $id = mysql_insert_id($con); |
| mysql_free_result($result) | 釋放結果集記憶體 | mysql_free_result($result); |
| mysql_close($link) | 關閉連線 | mysql_close($con); |
| mysql_error($link) | 取得最後錯誤訊息 | echo mysql_error($con); |
| mysql_errno($link) | 取得最後錯誤代碼 | echo mysql_errno($con); |
| mysql_escape_string($str) | 字串跳脫 (已棄用,改用 mysql_real_escape_string) | $safe = mysql_escape_string($str); |
| mysql_real_escape_string($str, $link) | 考慮連線字元集的跳脫 | $safe = mysql_real_escape_string($str, $con); |
| mysql_data_seek($result, $offset) | 移動結果指標 | mysql_data_seek($result, 0); // 重置 |
| mysql_result($result, $row, $field) | 直接取得單一值 | $val = mysql_result($result, 0, 'name'); |
| mysql_set_charset($charset, $link) | 設定連線字元集 (PHP 5.2.3+) | mysql_set_charset('utf8', $con); |
| mysql_get_server_info($link) | 取得 MySQL 版本 | echo mysql_get_server_info($con); |
| mysql_get_host_info($link) | 取得主機資訊 | echo mysql_get_host_info($con); |
| mysql_get_proto_info($link) | 取得協定版本 | echo mysql_get_proto_info($con); |
| mysql_stat($link) | 取得狀態資訊 | echo mysql_stat($con); |
<?php
mysql_query('SET AUTOCOMMIT=0');
mysql_query('BEGIN');
// 或 mysql_query('START TRANSACTION');
mysql_query("INSERT ...");
mysql_query("UPDATE ...");
if ($all_ok) {
mysql_query('COMMIT');
} else {
mysql_query('ROLLBACK');
}
mysql_query('SET AUTOCOMMIT=1');
?>
| mysql_* 函數 | MySQLi (程序式) | MySQLi (物件導向) | PDO |
|---|---|---|---|
| mysql_connect() | mysqli_connect() | new mysqli() | new PDO() |
| mysql_select_db() | mysqli_select_db() | $mysqli->select_db() | DSN 指定 dbname |
| mysql_query() | mysqli_query() | $mysqli->query() | $pdo->query() / prepare() |
| mysql_fetch_assoc() | mysqli_fetch_assoc() | $result->fetch_assoc() | $stmt->fetch(PDO::FETCH_ASSOC) |
| mysql_num_rows() | mysqli_num_rows() | $result->num_rows | $stmt->rowCount() (限 SELECT) |
| mysql_affected_rows() | mysqli_affected_rows() | $mysqli->affected_rows | $stmt->rowCount() |
| mysql_insert_id() | mysqli_insert_id() | $mysqli->insert_id | $pdo->lastInsertId() |
| mysql_free_result() | mysqli_free_result() | $result->free() | 自動 / $stmt = null |
| mysql_close() | mysqli_close() | $mysqli->close() | $pdo = null |
| mysql_real_escape_string() | mysqli_real_escape_string() | $mysqli->real_escape_string() | 預處理語句 (無需手動跳脫) |
| mysql_set_charset() | mysqli_set_charset() | $mysqli->set_charset() | DSN charset 參數 |