首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

PHP 連接 MySQL 兩大方式:原生擴展 vs ODBC 全解析

     編輯:MySQL 資料庫相關知識

架構對比

維度MySQL 原生擴展 (mysql_*)ODBC 抽象層 (odbc_*)
依賴libmysqlclientunixODBC + MySQL ODBC Driver
性能直連,開銷最小多一層轉換,略高延遲
功能覆蓋MySQL 專屬特性全支持標準 SQL 功能,高級特性受限
可移植性綁定 MySQL理論支持任意 ODBC 數據源
維護狀態PHP 7.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_assoc()、mysql_fetch_row()、mysql_fetch_object()
  • 指針控制:mysql_data_seek()、mysql_row_seek()
  • 元數據:mysql_num_rows()、mysql_num_fields()、mysql_fetch_field()、mysql_field_*() 系列
  • 釋放:mysql_free_result()

事務與信息

  • mysql_affected_rows()、mysql_insert_id()、mysql_errno()、mysql_error()
  • mysql_list_dbs()、mysql_list_tables()、mysql_list_fields()

ODBC 函數對應表

連接管理

  • odbc_connect() / odbc_pconnect()、odbc_close()、odbc_close_all()

查詢執行

  • 直接執行:odbc_exec()、odbc_do()
  • 預處理:odbc_prepare() + odbc_execute()

結果集處理

  • 獲取行:odbc_fetch_row()、odbc_fetch_into()、odbc_result()、odbc_result_all()(直接輸出 HTML 表格)
  • 元數據:odbc_num_rows()、odbc_num_fields()、odbc_field_name()、odbc_field_type()、odbc_field_len()
  • 釋放:odbc_free_result()

事務控制

  • odbc_autocommit()、odbc_commit()、odbc_rollback()

進階設置

  • odbc_setoption()、odbc_cursor()、odbc_longreadlen()、odbc_binmode()

實戰選型建議

  1. 新項目/僅用 MySQL:直接使用 PDO_MySQL 或 mysqli(面向對象/預處理/事務支持完善),mysql_* 已棄用。
  2. 多數據庫抽象層:採用 PDO(統一 API,支持 12+ 驅動),而非 ODBC,性能與功能更優。
  3. 歷史系統/異構接入:若必須對接無原生驅動的舊系統(如 Access、DB2、Informix),ODBC 是最後選擇。
  4. 安裝 ODBC 連接 MySQL 步驟:
    1. 安裝 unixODBC、MySQL Connector/ODBC
    2. /etc/odbcinst.ini 註冊驅動,/etc/odbc.ini 配置 DSN
    3. PHP 編譯加入 --with-unixODBC,啟用 extension=odbc

遷移提示

從 mysql_* 遷移到 mysqli/PDO 核心差異:預處理語句(prepare()/bind_param())、面向對象風格、異常處理、多語句執行(multi_query())。建議配合靜態分析工具(Psalm/PHPStan)批量重構。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved