Мне удалось прочитать данные файла Microsoft Access (.accdb) в Windows с использованием PDO, но у меня возникла проблема с работой в Linux (CentOS). Я вижу, что модули установлены:
[root@rapid host]# php -m | grep PDO PDO PDO_ODBC [root@rapid host]# php -m | grep odbc odbc
код:
<?php try{ $dbhAccess = new PDO("odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=/root/access/data.accdb;Uid=Admin"); } catch(PDOException $e){ echo $e->getMessage(); exit(); }
Я получаю erro при выполнении файла PHP (CLI):
[root@rapid host]# php access.php SQLSTATE[IM002] SQLDriverConnect: 0 [unixODBC][Driver Manager]Data source name not found, and no default driver specified
вы должны установить драйвер MDB.
У меня нет возможности попробовать это сейчас, но я думаю, что MDB Tools (в частности, драйвер ODBC ) может делать то, что вам интересно.
Я никогда не работал с базой данных Microsoft Access, но регулярно подключаюсь к серверам DB2 (на серверах IBM AS / 400) и MS SQL с серверов Linux (Ubuntu). Вероятно, ваша ошибка указывает, что у вас нет установленного драйвера MS Access. Единственное, о чем я знаю, это: http://www.easysoft.com/products/data_access/odbc-access-driver/index.html
В сообщении об ошибке также указано, что «Имя источника данных не найдено» – для того, чтобы я мог подключиться к DB2 или MSSQL, мне нужно добавить некоторую информацию в /etc/odbc.ini и /etc/odbcinst.ini.
/etc/odbcinst.ini – здесь вы описываете, где найти драйверы для ODBC. Вот пример того, что я использую для DB2 и MSSQL:
[iseries] Description = iSeries Access for Linux ODBC Driver Driver = /usr/lib/libcwbodbc.so Setup = /usr/lib/libcwbodbcs.so NOTE1 = If using unixODBC 2.2.11 or later and you want the 32 and 64-bit ODBC drivers to share DSN's, NOTE2 = the following Driver64/Setup64 keywords will provide that support. Driver64 = /usr/lib/lib64/libcwbodbc.so Setup64 = /usr/lib/lib64/libcwbodbcs.so Threading = 2 DontDLClose = 1 UsageCount = 1 # Define where to find the driver for the Free TDS connections. [freetds] Description = MS SQL database access with Free TDS Driver = /usr/lib/i386-linux-gnu/odbc/libtdsodbc.so Setup = /usr/lib/i386-linux-gnu/odbc/libtdsS.so UsageCount = 1 [ODBC] Trace = no TraceFile = /tmp/odbc.log
В этом последнем разделе ([ODBC]) у меня в настоящее время есть Trace = no – если вы измените это на Trace = yes, вы получите некоторую полезную информацию отладки в файле /tmp/odbc.log.
/etc/odbc.ini – здесь вы определяете источники данных. Вот пример того, что я использую для DB2 и MSSQL:
[primary] Description = primary Driver = iseries System = XXX.XXX.XXX.XXX UserID = XXXXXXXXXX Password = XXXXXXXXXX Naming = 0 DefaultLibraries = QGPL Database = MYLIB ConnectionType = 0 CommitMode = 2 ExtendedDynamic = 0 DefaultPkgLibrary = QGPL DefaultPackage = A/DEFAULT(IBM),2,0,1,0,512 AllowDataCompression = 1 LibraryView = 0 AllowUnsupportedChar = 0 ForceTranslation = 0 Trace = 0 # Define a connection to the MSSQL server. # The Description can be whatever we want it to be. # The Driver value must match what we have defined in /etc/odbcinst.ini # The Database name must be the name of the database this connection will connect to. # The ServerName is the name we defined in /etc/freetds/freetds.conf # The TDS_Version should match what we defined in /etc/freetds/freetds.conf [mssql] Description = MSSQL Server Driver = freetds Database = MyDatabase ServerName = mssql TDS_Version = 8.0
Я видел здесь несколько вопросов о том, как StackOverflow говорит об использовании баз данных MSFT Access с Linux-машины – и, похоже, никогда не бывает счастливого окончания. Если вы каким-либо образом можете переносить данные в другую, лучше поддерживаемую систему баз данных (например, MySQL), я думаю, вы избавитесь от некоторых головных болей. Удачи!
Вы не можете использовать {Microsoft Access Driver (* .mdb, * .accdb)} как часть вашего источника данных, потому что Microsoft не создает драйвер ODBC для MS Access для Linux. Насколько мне известно, есть 2 драйвера ODBC для MS Access. MDB Tools и Easysoft ODBC-Access Driver .
Если вы устанавливаете какой-либо драйвер, вы можете использовать DSN, который вы устанавливаете в файле odbc.ini, или как вы предпочитаете подключение DSN-Less. Ниже приведен пример подключения Easysoft DSN-Less к базе данных MS Access
PDO ("odbc: Driver = {Driver = Easysoft ODBC-ACCESS}; Dbq = / root / access / data.accdb");
Более подробную информацию о подключении и получении данных с помощью PDO-ODBC можно найти в руководстве Easysoft PHP. Существует раздел, посвященный половине пути, который говорит о PDO-ODBC.