想了解从托管网站连接MySQL和MS Access数据库的最佳做法。我有一个在过去15年中一直使用MS Access DB的现有站点。数百页有DB的连接字符串,有些是DAO,有些是OLEDB,有些是ADO。我正在尝试将整个数据库移动到MySQL但不能一次移动它。我正在考虑的事情:
我的愿望是最终使用MySQL DB代替MS Access,但转换需要数月才能完成。我需要保持站点活动,直到重写所有连接页面以连接到MySQL(在PHP中)
附加代码与两个数据库都有工作连接 - 两者都对可用方法有限制。 (示例LIMIT不适用于Access,CROSSTAB / PIVOT不适用于MySQL)
我正在寻找关于如何完成这项任务的建议...
有关链接的有用帖子:MS access 2010 ODBC connection to MySQL
<html>
<head>
<title>PHP and ODBC: PDO Example </title>
</head>
<body>
<?php
/////////////////////////////////////////// ACCESS PDO //////////////////////////////////////////////////////
try{
$mdbFile = "e:\Training.mdb";
$pdo = new PDO("odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=$mdbFile", "", "");
$query = $pdo->prepare("SELECT * FROM Users WHERE UserName LIKE 'Bar%'");
$query->execute();
echo "<table class='table table-striped table-bordered table-hover table-condensed'>";
echo "<thead><tr>";
echo "<th>AutoNum</th><th>User Name</th><th>Email</th>";
echo "</tr></thead>";
for($i=0; $row = $query->fetch(); $i++){
echo "<tbody><tr>";
echo "<td>".$row['AutoNum']."</td>";
echo "<td>".$row['UserName']."</td>";
echo "<td>".$row['Email']."</td>";
}
echo "</tr></tbody></table>";
unset($pdo);
unset($query);
} catch (PDOException $e) {
echo "Failed to get DB handle: " . $e->getMessage() . "\n";
exit;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////// MYSQL ODBC //////////////////////////////////////////////////
// *** THIS WORKS - DON'T CHANGE ***
//$mdbFilename = "e:\Training.mdb";
//$user = "";
//$password = "";
//$connection = odbc_connect("Driver={Microsoft Access Driver (*.mdb)};Dbq=$mdbFilename", $user, $password);
$user = "user";
$password = "password";
$connection = odbc_connect("Driver={MySQL ODBC 5.1 Driver};SERVER=$mdbFilename; database=MYSQL_training", $user, $password);
if (!$connection) {
echo "Couldn't make a connection!";
exit;
}
$sql = "SELECT * FROM Users WHERE UserName LIKE 'Bar%'";
$process=odbc_exec($connection, $sql);
echo "<br><br><br>";
echo "<table class='table table-striped table-bordered table-hover table-condensed'>";
echo "<thead><tr>";
echo "<th>AutoNum</th><th>User Name</th><th>Email</th>";
echo "</tr></thead>";
while(odbc_fetch_row($process)){
$username = odbc_result($process, "UserName");
$email = odbc_result($process, "Email");
$autonum = odbc_result($process, "AutoNum");
echo "<tbody><tr>";
echo "<td>".$autonum."</td>";
echo "<td>".$username."</td>";
echo "<td>".$email."</td>";
}
echo "</tr></tbody></table>";
odbc_close($connection);
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////// MYSQL PDO///////////////////////////////////////////////////////
$db_mysql = "mysql_training";
$user = "user";
$password = "password";
$pdo = new PDO("odbc:Driver={MySQL ODBC 5.1 Driver};SERVER=$mdbFilename; database=$db_mysql", $user, $password);
try{
$query = $pdo->prepare("SELECT * FROM Users WHERE UserName LIKE 'Bar%' LIMIT 3");
$query->execute();
echo "<br><br><br>";
echo "<table class='table table-striped table-bordered table-hover table-condensed'>";
echo "<thead><tr>";
echo "<th>AutoNum</th><th>User Name</th><th>Email</th>";
echo "</tr></thead>";
for($i=0; $row = $query->fetch(); $i++){
echo "<tbody><tr>";
echo "<td>".$row['AutoNum']."</td>";
echo "<td>".$row['UserName']."</td>";
echo "<td>".$row['Email']."</td>";
}
echo "</tr></tbody></table>";
unset($pdo);
unset($query);
} catch (PDOException $e) {
echo "Failed to get DB handle: " . $e->getMessage() . "\n";
exit;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
?>
</body>
</html>