7

我已设法使用 PDO 在 Windows 上读取 Microsoft Access 文件 (.accdb) 的数据,但在 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();
    }

执行 (CLI) PHP 文件时出现错误:

[root@rapid host]# php access.php
SQLSTATE[IM002] SQLDriverConnect: 0 [unixODBC][Driver Manager]Data source name not found, and no default driver specified
4

5 回答 5

2

您应该安装 MDB 驱动程序。

我现在没有办法尝试,但我认为MDB 工具(特别是ODBC 驱动程序)可以做你感兴趣的事情。

于 2012-11-20T14:54:45.747 回答
1

您不能使用{Microsoft Access Driver (*.mdb, *.accdb)}作为数据源的一部分,因为 Microsoft 没有为 Linux 制作 MS Access ODBC 驱动程序。据我所知,MS Access 有 2 个 ODBC 驱动程序。MDB 工具Easysoft ODBC-Access 驱动程序。

如果您安装任一驱动程序,您可以使用您在 odbc.ini 文件中设置的 DSN,或者您更喜欢 DSN-Less 连接。这是一个连接到 MS Access 数据库的 Easysoft DSN-Less 示例

PDO("odbc:Driver={Driver=Easysoft ODBC-ACCESS};Dbq=/root/access/data.accdb");

有关使用 PDO-ODBC 连接和取回数据的更多信息,请参阅Easysoft PHP 指南。有一个关于 PDO-ODBC 的部分大约在中途。

于 2012-11-22T12:00:26.333 回答
1

我从未使用过 Microsoft Access 数据库,但我经常从 Linux (Ubuntu) 服务器连接到 DB2(在 IBM AS/400 上)和 MS SQL 服务器。您的错误似乎表明您没有安装 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 上看到了很多关于在 Linux 机器上使用 MSFT Access 数据库的问题——而且似乎从来没有一个圆满的结局。如果有任何方法可以将数据移植到不同的、受更好支持的数据库系统(如 MySQL),我想你会省去一些麻烦。祝你好运!

于 2012-11-20T14:49:40.077 回答
0
import pandas_access as mdb

db_filename = 'my_db.mdb'

# Listing the tables
for tbl in mdb.list_tables(db_filename):
    print(tbl)

# Read a small table
df = mdb.read_table(db_filename, "MyTable")

在 Ubuntu 上,您可能需要运行:

sudo apt install mdbtools
于 2021-12-15T14:19:13.423 回答
-1

对于WINDOWS,这是解决方案。

在投入大量时间后,我有了解决方案。

必须安装 32 位版本的“AccessDatabaseEngine”。

下载 32 位访问引擎:https ://www.microsoft.com/es-es/download/confirmation.aspx?id=13255

并使用命令行运行它:AccessDatabaseEngine.exe /passive

在那之后,它应该工作。

于 2020-01-17T01:53:54.807 回答