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 データベースを扱ったことはありませんが、定期的に DB2 (IBM AS/400 上) および Linux (Ubuntu) サーバーから MS SQL サーバーに接続しています。あなたのエラーは、MS Access ドライバーがインストールされていないことを示しているようです

エラー メッセージには「データ ソース名が見つかりません」というメッセージも表示されます。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 に答える
1

{Microsoft Access Driver (*.mdb, *.accdb)}をデータ ソースの一部として使用することはできません。これは、Microsoft が Linux 用の MS Access ODBC ドライバーを作成していないためです。私の知る限り、MS Access 用の ODBC ドライバーは 2 つあります。MDB ToolsとEasysoft ODBC-Access Driver .

いずれかのドライバーをインストールする場合は、odbc.ini ファイルでセットアップした DSN を使用するか、DSN レス接続を優先して使用できます。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 に答える