Как связать скрипт 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
Вот пример подключения и простой выбор …
<?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, что вам нужно пройти обратную косую черту, а не косую черту
Для меня работает следующее: с файлом MDB в веб-корне, называемом db4
$ defdir = str_replace ("/", "\\", $ _SERVER ["DOCUMENT_ROOT"]); $ dbq = $ defdir. "\\ db4.mdb"; if (! file_exists ($ dbq)) {die («Файл базы данных $ dbq не существует»); } $ 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, "", "") или умереть («Не удалось подключиться к базе данных Access $ dsn»);
Я не уверен, что это нарушение передового опыта или безопасности, но я хотел бы отбросить это предложение:
настройте соединение ODBC и включите пароль базы данных в настройках предварительной настройки odbc. дайте odbc соединить имя 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