Benny Hill
的回答到setting up FreeTDS(順便用ODBC做)的回答
以下是我在基於Debian的系統上使用FreeTDS
配置ODBC
的步驟列表。
TDS 8.0支持預處理語句。
注意:在連接上不支持SET NAMES a
或SET CHARSET a
;字符集需要通過設置FreeTDS屬性使用組合配置來定義。使用獨立的ODBC驅動程序將字符集默認爲ASCII
,這給出了奇怪的結果。有關可能的問題的示例,請參閱我的other post。
安裝需要的軟件包:
sudo apt-get install freetds-bin freetds-common unixodbc tdsodbc php5-odbc
freetds-bin
提供freetds的,以及tsql
和isql
(用於調試更高版本)。
freetds-common
已經安裝在系統上,但不包括兩個調試工具。在定義配置後的稍後日期安裝freetds-bin
不會導致問題。
unixodbc
是ODBC驅動程序
tdsodbc
提供ODBC
php5-odbc
TDS協議是PHP模塊二手ODBC驅動程序。請注意,您的PHP版本可能與我的不同。
配置獨立的unixODBC
在/etc/odbcinst.ini
ODBC驅動程序設置:
[odbc]
Description = ODBC driver
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
UsageCount = 1
在/etc/odbc.ini
創建一個系統範圍內的數據源名稱配置:
[datasourcename]
Driver = odbc
Description = Standalone ODBC
Server = <IP or hostname>
Port = <port>
TDS_Version = 8.0
未配置ixODBC和freetds的:在/etc/odbcinst.ini
ODBC驅動程序設置:
[odbc]
Description = ODBC driver
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
UsageCount = 1
在/etc/odbc.ini
創建一個系統範圍內的數據源名稱配置:
[datasourcename]
Driver = FreeTDS_odbc
Description = Uses FreeTDS configuration settings defined in /etc/freetds/freetds.conf
Servername = datasourcename
TDS_Version = 8.0
添加ODBC數據源名稱配置到freetds的在/etc/freetds/freetds.conf
:
[datasourcename]
host = <IP or hostname>
port = <port>
client charset = UTF-8
tds version = 8.0
text size = 20971520
encryption = required
IMPORTANT: make sure that the odbc files are readable by the process that will be reading them. If you are running your webserver using a www-data
user, they must have the proper permissions to read those files!
現在,您可以設置連接字符freetds.conf
設置,並連接到與PDO的數據庫
$pdo = new PDO('odbc:datasourcename');
測試:
使用tsql
檢查freetds的配置,並可以連接到數據庫。
tsql -S datasourcename -U username -P password
使用isql
檢查ODBC是否正確連接。
isql -v datasourcename username password
鏈接ODBC與PHP:
添加ODBC PHP模塊php.ini
通過添加以下:
extension = odbc.so
注意,您php.ini
位置將取決於您所使用的網絡服務器。 使用<?php phpinfo(); ?>
並通過網絡服務器查看它的位置。
重啓Apache
編輯: 與駕駛員的字符集的功能添加信息,因爲我遇到了與獨立的ODBC配置哪裏會忽略任何試圖更改連接的字符集問題。