2015-02-18 14 views
1

Я пытаюсь получить доступ к файлу MDB с помощью PHP на машине CentOS, предпочтительно используя PDO. Я установил модули ODBC и pdo_odbc в PHP и перезапустил веб-сервер (Apache). Я также установил mdbtools и unixODBC.Доступ к файлу MDB с PHP на компьютере CentOS

print_r(PDO::getAvailableDrivers()); 

Шоу:

Array 
(
    [0] => mysql 
    [1] => odbc 
    [2] => pgsql 
    [3] => sqlite 
) 

Я пытаюсь получить доступ к файлу DBA (который сохраняется локально) с этим кодом:

try 
{ 
    $driver = "/usr/lib64/libmdbodbc.so.0"; 
    $dbName = "/PATH/FILE.MDB"; 
    if (!file_exists($dbName)) { 
     die("Could not find database file."); 
    } 
    $db = new PDO("odbc:DRIVER=$driver; DBQ=$dbName; Uid=; Pwd=;"); 

    $sql = "SHOW TABLES"; 

    $result = $db->query($sql); 
    $row = $result->fetch(); 

    var_dump($row); 

} 
catch(Exception $e) 
{ 
    echo "\n\nEXCEPTION: $e\n\n"; 
} 

И это выходы:

EXCEPTION: exception 'PDOException' with message 'SQLSTATE[IM002] SQLDriverConnect: 0 [unixODBC][Driver Manager]Data source name not found, and no default driver specified' in /PATH/odbctest.php:14 
Stack trace: 
#0 /PATH/odbctest.php(14): PDO->__construct('odbc:DRIVER=/us...') 
#1 {main} 

Что мне нужно изменить? Что следует использовать в качестве имени драйвера? Я искал повсюду, и все, что я нахожу, - это очень много старых вещей с эпохи 2004 года, но многие ссылки исчезли с годами. Это наиболее актуальный вопрос StackOverflow, но не содержит никакого кода: PDO Microsoft Access. Мне действительно нужно только прочитать из файла.

EDIT:

С некоторыми мастерить это, кажется, что теперь я по крайней мере, PDO счастливы с водителем, исправляя odbcinst.ini файл, который теперь содержит следующие:

[MDBTools] 
Description = MDBTools Driver 
Driver64 = /usr/lib64/libmdbodbc.so.0 
Setup  = /usr/lib64/libmdbodbc.so.0 
FileUsage = 1 
UsageCount = 1 

К сожалению, я по-прежнему получает сообщение об ошибке:

exception 'PDOException' with message 'SQLSTATE[08001] SQLDriverConnect: 1 [unixODBC]Could not find DSN in connect string' in /PATH/odbctest.php:15 
Stack trace: 
#0 /PATH/odbctest.php(15): PDO->__construct('odbc:Driver=MDB...') 
#1 {main} 

Я делаю вызов PDO следующим образом:

$driver = "MDBTools"; 
$dbName = "/PATH/DATABASE.MDB"; 
$db = new PDO("odbc:Driver=$driver; DBQ=$dbName; Uid=; Pwd=;"); 

Я попытался добавить источник данных в файл odbc.ini, хотя я не могу сделать это в производственной версии и до сих пор получаю ту же ошибку. Я нашел это, что интересно: DSN-less connection with PHP ODBC using MDBTools Driver. Какие-либо предложения?

+0

Возможно, это полезно: https://gist.github.com/amirkdv/9672857 –

+0

Очень полезно! После добавления правильной записи в файл odbcinst.ini кажется, что PHP и PDO теперь находят правильный драйвер, но теперь я получаю сообщение об ошибке «Не удалось найти DNS в строке подключения». Я не добавил запись в odbc.ini, так как вся информация должна быть в вызове PDO. Есть идеи? – user2395126

ответ

0
$driver = "MDBTools"; 
$dbName = "/PATH/DATABASE.MDB"; 
$db = new PDO("odbc:Driver=$driver;DBQ=$dbName", "", ""); 

 Смежные вопросы

  • Нет связанных вопросов^_^