2008-09-22 117 views
0

我們如何將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 
+0

是這樣的: '\ WebUpdate \\' 一個錯字?你正在逃避一個斜線,而不是其他。 – 2008-09-22 14:03:07

回答

4

下面是一個連接和一個簡單的選擇......

樣本
<?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(); 
?> 
0

在文件名中,我正在查看'\ WebUpdate \' - 它看起來像是你最開始有兩個反斜槓。你是否可能在開始時錯過了一個反斜槓?

0
$db_path = $_SERVER['DOCUMENT_ROOT'] . '\WebUpdate\\' . $file_name . '.mdb'; 

用斜槓替換反斜槓使用。 '/ WebUpdate /'。

0

它看起來像路徑分隔符的問題。 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"); 
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