用于MS Access连接的PDO与ODBC

时间:2016-08-19 00:07:48

标签: mysql ms-access pdo odbc

想了解从托管网站连接MySQL和MS Access数据库的最佳做法。我有一个在过去15年中一直使用MS Access DB的现有站点。数百页有DB的连接字符串,有些是DAO,有些是OLEDB,有些是ADO。我正在尝试将整个数据库移动到MySQL但不能一次移动它。我正在考虑的事情:

  • 在访问新MySQL并通过
  • 移动数据时链接表
  • 重写PHP中的所有页面并使用PDO连接(可在Access / MySQL上使用)
  • 在两者上使用ODBC连接(有什么优点和缺点)
  • 使用现有的.NET页面与PDO连接到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>

0 个答案:

没有答案