環境 ODBC for Access MDB 設定:
1. Windows
在 windows 上,在 php.ini 開啟 php_pdo_odbc.dll 擴展
extension=php_pdo_odbc.dll
2. Linux
在 Linux 上,則要另外安裝 ODBC 和 mdbtools
[ mdbtools 說明 ]
mdbtools 是目前 Linux 上操作 Access MDB 免費方案的解決方法,
但我測試時的版本,只能執行簡單的SQL語法,一些 SQL 語法在 windows 上正常,
但在 linux 透過 mdbtools 都無法執行(PHP PDO 執行後 false,直接使用指令透過 ODBC 操作,則出現 Couldn't parse SQL 的錯誤)。
安裝 php-odbc
$ yum install php-odbc安裝 MDBTools
$ yum install mdbtools安裝 mdbtools-devel ,安裝這個才有 libmdbodbc.so
$ yum install mdbtools-devel
查看 /etc/odbcinst.ini 內容,看一下設定的格式
$ less /etc/odbcinst.ini # Example driver definitions # Driver from the postgresql-odbc package # Setup from the unixODBC package [PostgreSQL] Description = ODBC for PostgreSQL Driver = /usr/lib/psqlodbcw.so Setup = /usr/lib/libodbcpsqlS.so Driver64 = /usr/lib64/psqlodbcw.so Setup64 = /usr/lib64/libodbcpsqlS.so FileUsage = 1 # Driver from the mysql-connector-odbc package # Setup from the unixODBC package [MySQL] Description = ODBC for MySQL Driver = /usr/lib/libmyodbc5.so Setup = /usr/lib/libodbcmyS.so Driver64 = /usr/lib64/libmyodbc5.so Setup64 = /usr/lib64/libodbcmyS.so FileUsage = 1可知要有 ODBC for MDB 的話, lib、lib64 目錄,應該會有 libmdbodbc.so 之類的檔案
$ ls -al /usr/lib/libmdb* ls: 無法存取 /usr/lib/libmdb*: 沒有此一檔案或目錄 $ ls -al /usr/lib64/libmdb* -rwxr-xr-x 1 root root 38240 2月 20 2015 /usr/lib64/libmdbodbc.so -rwxr-xr-x 1 root root 42536 2月 20 2015 /usr/lib64/libmdbodbcW.so lrwxrwxrwx 1 root root 15 2月 5 17:14 /usr/lib64/libmdb.so -> libmdb.so.2.0.1 lrwxrwxrwx 1 root root 15 2月 5 16:35 /usr/lib64/libmdb.so.2 -> libmdb.so.2.0.1 -rwxr-xr-x 1 root root 90104 2月 20 2015 /usr/lib64/libmdb.so.2.0.1 lrwxrwxrwx 1 root root 18 2月 5 17:14 /usr/lib64/libmdbsql.so -> libmdbsql.so.2.0.0 lrwxrwxrwx 1 root root 18 2月 5 16:35 /usr/lib64/libmdbsql.so.2 -> libmdbsql.so.2.0.0 -rwxr-xr-x 1 root root 41144 2月 20 2015 /usr/lib64/libmdbsql.so.2.0.0可發現 usr/lib64/ 底下有 libmdbodbc.so 的檔案link
在 odbcinst.ini 裡面,多加一組 MDBTools MDB ODBC Driver(名稱可自訂) 設定
$ vi /etc/odbcinst.ini [MyMDBDriver] Description = MDBTools MDB ODBC Driver Driver = /usr/lib/libmdbodbc.so Setup = /usr/lib/libmdbodbc.so Driver64 = /usr/lib64/libmdbodbc.so Setup64 = /usr/lib64/libmdbodbc.so FileUsage = 1 UsageCount = 1
PHP 程式範例:
$uname = explode(" ", php_uname()); $os = $uname[0]; switch ($os) { case 'Windows': $mdb_file = 'D:\test.mdb'; $driver = '{Microsoft Access Driver (*.mdb)}'; break; case 'Linux': $mdb_file = '/home/test.mdb'; $driver = 'MyMDBDriver'; //在 /etc/odbcinst.ini 裡的設定名稱 break; default: exit("Don't know about this OS"); } $dataSourceName = "odbc:Driver=$driver;DBQ=$mdb_file;"; $connection = new PDO($dataSourceName); $sql = "SELECT * FROM test"; $stmt = $connection->query($sql); $data = $stmt->fetchAll(\PDO::FETCH_ASSOC);
參考:
Access a mdb database from a php web site
How to handle MS Access MDB files in Linux with PHP5 PDO and ODBC · GitHub
PHP: PDO_ODBC DSN - Manual
其他:
1. 若在 /etc/odbc.ini 增加以下設定
$ vi /etc/odbc.ini [MDBtest] Description = The Source of My test mdb Driver = MyMDBDriver ServerName = localhost Database = /home/test.mdb則可這樣進入 SQL 指令介面,進入後,可直接用 SQL 指令操作 /home/test.mdb 資料庫
$ isql -v MDBtest +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL>
2. 編譯安裝 mdbtools:
GitHub - brianb/mdbtools: MDB Tools - Read Access databases on *nix
Install mdbtools on Centos 7 – Dale Scott
tar zxvf mdbtools-0.6pre1.tar.gz cd mdbtools-0.6pre1/ autoreconf -i -f ./configure --with-unixodbc=/usr/local make make install
3. Access mdb 時間欄位:
SQL語法中條件值中有日期時間格式的值﹐需要在日期時間值的左右加上#
$sql = "SELECT * FROM test WHERE aa >#{2016-03-15}#";參考:請問mdf與mdb的SQL語法有何差別? - Delphi K.Top 討論區
沒有留言:
張貼留言