首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 資料庫操作常用函數完整參考手冊

     編輯:PHP 相關知識

前言

本文系統整理 PHP 開發中常用的 MySQL 資料庫操作函數,分類說明用法、參數、回傳值與範例。注意:mysql_* 函數已於 PHP 7.0 移除,新專案請使用 MySQLi 或 PDO。

一、連線與資料庫選擇

mysql_connect() - 建立非持久連線

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);
?>

mysql_select_db() - 選擇資料庫

bool mysql_select_db(string $database_name, resource $link_identifier = null)
<?php
mysql_select_db('my_database', $con) or die(mysql_error($con));
?>

二、SQL 執行與結果處理

mysql_query() - 執行 SQL

resource|bool mysql_query(string $query, resource $link_identifier = null)
  • SELECT/SHOW/EXPLAIN/DESCRIBE:成功回傳 resource,失敗回傳 false
  • INSERT/UPDATE/DELETE/DROP:成功回傳 true,失敗回傳 false
  • 查詢字串不應以分號結尾
<?php
$query = "SELECT * FROM users WHERE status = 1";
$result = mysql_query($query, $con) or die(mysql_error($con));
?>

mysql_fetch_row() - 取得數值索引陣列

array|false mysql_fetch_row(resource $result)

回傳當前列的數值陣列,內部指標移至下一列。

<?php
while ($row = mysql_fetch_row($result)) {
  echo "ID: $row[0], Name: $row[1]
";
}
?>

mysql_fetch_assoc() - 取得關聯陣列

array|false mysql_fetch_assoc(resource $result)

等同 mysql_fetch_array($result, MYSQL_ASSOC),鍵為欄位名。

mysql_fetch_array() - 取得雙重陣列

array|false mysql_fetch_array(resource $result, int $result_type = MYSQL_BOTH)

$result_type:MYSQL_ASSOC、MYSQL_NUM、MYSQL_BOTH (預設)。

mysql_fetch_object() - 取得物件

object|false mysql_fetch_object(resource $result, string $class_name = "stdClass", array $params = [])

mysql_fetch_field() - 取得欄位中繼資料

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}
";
}
?>

三、資料庫與資料表資訊

mysql_list_tables() - 列出資料表

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] . "
";
}
?>

mysql_list_fields() - 列出欄位

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);

五、交易控制 (需 InnoDB)

<?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');
?>

⚠️ 現代化對照表 (MySQLi / PDO)

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 參數

最佳實踐建議

  1. 立即停用 mysql_*:所有新專案使用 PDO 或 MySQLi
  2. 統一使用預處理語句:防止 SQL 注入、提升重複查詢效能
  3. 錯誤模式設為例外:PDO::ERRMODE_EXCEPTION / mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT)
  4. 字元集統一 utf8mb4:支援完整 Unicode (含 Emoji)
  5. 連線複用:PHP-FPM 環境下 PDO/MySQLi 連線可跨請求重用 (持久連線需謹慎評估)
  6. 資料庫抽象層:使用 Query Builder (Laravel Eloquent, Doctrine DBAL, Yii ActiveRecord) 提高開發效率
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved