將 MySQL 表 sqltable (id, name, sex, email) 資料遷移至 Access 表 Accesstable (相同結構)。
<?php
// 1. 連接 MySQL
$mysql_conn = mysql_connect("localhost", "", "");
mysql_select_db("mydatabase", $mysql_conn);
// 2. 查詢來源資料
$sql = "SELECT * FROM sqltable";
$result = mysql_query($sql, $mysql_conn);
// 3. 連接 Access (ODBC)
$odbc_conn = odbc_connect("DSN名稱", "使用者", "密碼");
// 4. 逐筆寫入 Access
while ($row = mysql_fetch_assoc($result)) {
$insert_sql = sprintf(
"INSERT INTO Accesstable (id, name, sex, email) VALUES (%d, '%s', '%s', '%s')",
$row['id'],
addslashes($row['name']),
addslashes($row['sex']),
addslashes($row['email'])
);
odbc_exec($odbc_conn, $insert_sql);
}
// 5. 關閉連接
odbc_close($odbc_conn);
mysql_close($mysql_conn);
?>
mysql_* 函數(舊版),新專案建議改用 mysqli 或 PDOaddslashes() 防止單引號破壞 SQL,正式專案建議用參數化查詢LOAD DATA 等大量匯入工具try-catch、交易控制、失敗重試邏輯<?php
$pdo_mysql = new PDO("mysql:host=localhost;dbname=mydatabase", "user", "pass");
$pdo_access = new PDO("odbc:DSN名稱", "user", "pass");
$stmt = $pdo_mysql->query("SELECT * FROM sqltable");
$insert = $pdo_access->prepare("INSERT INTO Accesstable (id, name, sex, email) VALUES (?, ?, ?, ?)");
$pdo_access->beginTransaction();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$insert->execute([$row['id'], $row['name'], $row['sex'], $row['email']]);
}
$pdo_access->commit();
?>
優勢:參數化防注入、交易保證原子性、統一介面支援多種資料庫。