0

我们如何将PHP脚本连接到MS Access (.mdb)文件?

我尝试包含以下PHP代码:

$db_path = $_SERVER['DOCUMENT_ROOT'] . '\WebUpdate\\' . $file_name . '.mdb';
$cfg_dsn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" . $db_path;
$odbcconnect = odbc_connect($cfg_dsn, '', '');

但它失败了,我收到以下错误消息:

 Warning: odbc_connect() [function.odbc-connect]: SQL error: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified, SQL state IM002 in SQLConnect in C:\web\WebUpdate\index.php on line 41
4

5 回答 5

5

这是一个连接示例和一个简单的选择...

<?php
$db_conn = new COM("ADODB.Connection");
$connstr = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=". realpath("./Northwind.mdb").";";
$db_conn->open($connstr);
$rS = $db_conn->execute("SELECT * FROM Employees");
$f1 =  $rS->Fields(0);
$f2 =  $rS->Fields(1);
while (!$rS->EOF)
{
    print $f1->value." ".$f2->value."<br />\n";
    $rS->MoveNext();
}
$rS->Close();
$db_conn->Close();
?> 
于 2008-09-22T14:02:12.917 回答
0

在文件名中,我正在查看 '\WebUpdate\' - 看起来您的开头有一个反斜杠,结尾有两个。您可能在开头缺少反斜杠吗?

于 2008-09-22T14:05:18.150 回答
0
$db_path = $_SERVER['DOCUMENT_ROOT'] . '\WebUpdate\\' . $file_name . '.mdb';

用斜杠替换反斜杠 use . '/WebUpdate/' 。

于 2008-09-22T14:06:00.473 回答
0

看起来路径分隔符有问题。ISTR 你必须通过反斜杠而不是正斜杠

以下对我有用 - 在 webroot 中有一个名为 db4 的 MDB 文件

    $defdir = str_replace("/", "\\", $_SERVER["DOCUMENT_ROOT"]);
    $dbq = $defdir 。"\\db4.mdb";
if (!file_exists($dbq)) { die("数据库文件 $dbq 不存在"); }

    $dsn = "DRIVER=Microsoft Access 驱动程序 (*.mdb);UID=admin;UserCommitSync=Yes;Threads=3;SafeTransactions=0;PageTimeout=5;MaxScanRows=8;MaxBufferSize=2048;FIL=MS Access;DriverId= 25;DefaultDir=$defdir;DBQ=$dbq";
    $odbc_conn = odbc_connect($dsn,"","")
        or die("Could not connect to Access database $dsn");
于 2008-09-22T14:09:42.617 回答
0

我不确定这是否违反了最佳实践或安全性,但我想放弃这个建议:

设置 ODBC 连接并在 odbc 高级设置中包含数据库的密码。给 odbc conn 一个 DSN 名称,然后保存。

在您的代码中,只需设置如下连接:

try {
  $conn = @odbc_connect("DSNName", "", "", "SQL_CUR_USE_ODBC");
  // un and pw parameters are passed as empty strings since the DSN 
  // has knowledge of the password already.
  // 4th parameter is optional

  $exec = @odbc_exec($conn, $insert) or die ("exec error");
  echo "success!";
}
catch (Exception $e) {
  echo $e->getMessage();
} // end try catch
于 2009-02-26T14:28:45.113 回答