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

PHP + ODBC 實現 MySQL 資料同步至 Access 資料庫

     編輯:MySQL 資料庫相關知識

異構資料庫同步常見需求:MySQL → Access。本文提供完整 PHP 腳本,透過 ODBC 驅動將 MySQL 表資料逐筆寫入 Access。

場景設定

  • 來源:MySQL 表 sqltable(id, name, sex, email)
  • 目標:Access 表 Accesstable(同結構)
  • Access 已建立系統 DSN 名稱 DSN,帳密 USERNAME/PASSWORD

完整同步腳本

<?php
// 1. 連接 MySQL
$mysql = mysql_connect('localhost', 'user', 'pass');
mysql_select_db('mydatabase', $mysql);

// 2. 查詢來源資料
$sql = 'SELECT * FROM sqltable';
$res = mysql_query($sql, $mysql);

// 3. 連接 Access (ODBC)
$odbc = odbc_connect('DSN', 'USERNAME', 'PASSWORD');

// 4. 逐筆寫入
while ($row = mysql_fetch_assoc($res)) {
    // 注意:Access 欄位若為保留字需加 []
    $sql = "INSERT INTO Accesstable (id, name, sex, email) VALUES (" .
           "'" . $row['id'] . "', " .
           "'" . addslashes($row['name']) . "', " .
           "'" . addslashes($row['sex']) . "', " .
           "'" . addslashes($row['email']) . "')";
    odbc_exec($odbc, $sql);
}

// 5. 關閉連線
odbc_close($odbc);
mysql_close($mysql);
?>

關鍵改良點(對比原始碼)

  1. 用 mysql_fetch_assoc 取關聯陣列,避免數字索引易錯。
  2. addslashes 基本防單引號注入,正式環境建議用 PDO + 參數綁定。
  3. 明確列出欄位名 INSERT INTO ... (col1, col2...),防結構變更錯位。
  4. 錯誤處理:生產環境需加 try-catch、記錄失敗行、事務控制。

效能優化建議

  • 大量資料(>萬筆)請改用 LOAD DATA 或 INSERT ... VALUES (...),(...),... 批次寫入。
  • 關閉 Access 索引 → 匯入 → 重建索引,速度提升 10 倍以上。
  • 考慮用 ETL 工具(Kettle、Talend)或 CDC 同步替代腳本。

現代替代方案

PHP 7+ 已移除 mysql_*,請改用 PDO_ODBC 或 mysqli + odbc 擴展:

$pdoMy = new PDO('mysql:host=localhost;dbname=mydatabase', 'user', 'pass');
$pdoAc = new PDO('odbc:DSN', 'USERNAME', 'PASSWORD');
$stmt = $pdoMy->query('SELECT * FROM sqltable');
$ins = $pdoAc->prepare('INSERT INTO Accesstable (id,name,sex,email) VALUES (?,?,?,?)');
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    $ins->execute([$row['id'], $row['name'], $row['sex'], $row['email']]);
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved