PHP和MS Access
问题描述:
我们如何将PHP
脚本连接到MS Access (.mdb)
文件?PHP和MS Access
我试图通过包括以下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
答
下面是一个连接和一个简单的选择......
样本<?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();
?>
答
在文件名中,我正在查看'\ WebUpdate \' - 它看起来像是你最开始有两个反斜杠。你是否可能在开始时错过了一个反斜杠?
答
$db_path = $_SERVER['DOCUMENT_ROOT'] . '\WebUpdate\\' . $file_name . '.mdb';
用斜杠替换反斜杠使用。 '/ WebUpdate /'。
答
它看起来像路径分隔符的问题。 ISTR,你必须通过反斜杠不是正斜杠
下对我的作品 - 与Webroot公司的MDB文件名为DB4
$defdir = str_replace("/", "\\", $_SERVER["DOCUMENT_ROOT"]); $dbq = $defdir . "\\db4.mdb"; if (!file_exists($dbq)) { die("Database file $dbq does not exist"); } $dsn = "DRIVER=Microsoft Access Driver (*.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");
答
我不能肯定这是否违反了最佳做法或安全,但我想抛出这个建议:
设置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
是这样的: '\ WebUpdate \\' 一个错字?你正在逃避一个斜线,而不是其他。 – 2008-09-22 14:03:07