Назад | Перейти на главную страницу

php5-mssql / freetds: может подключаться к tsql, но не к php5-mssql

Я пытаюсь настроить рабочую станцию ​​Ubuntu для разработки php с помощью php5-mssql. Сначала я скомпилировал freetds-nightly 0.8.3 (с --enable-msdblib) и установил его в / usr / local / freetds, скопировав файлы заголовков из пакета в / usr / local / freetds / include.

Затем я взял исходный код php5 с помощью apt-get source php5 и скомпилировал расширение mssql следующим образом:

phpize
cd ext/mssql
./configure --with-mssql=/usr/local/freetds
make
sudo install

это поместило mssql.so в мой каталог расширений php, и php нормально загружает расширение. После всего этого я добавил свой сервер в /usr/local/freetds/etc/freetds.conf:

[global]
    tds version = 7.0
    dump file = /tmp/freetds.log
    text size = 64512

[db-02]
host = XXXXX
port = 1433
tds version = 7.0

Прежде всего, я хотел использовать tds 8.0, но любое значение выше 7.1 игнорируется, что является strage, поскольку freetds на моем Mac (построенном из macports с + mssql) делает 8.0, будучи старше. (0.8.2 я думаю)

В любом случае, с этим я могу красиво подключиться к своему серверу с помощью / usr / local / freetds / bin / tsql. НЕ с php5-mssql ..

вот некоторые результаты из freetds.log (это все из неудачной попытки)

log.c:196:Starting log file for FreeTDS 0.83.dev.20100710
    on 2010-07-13 11:17:23 with debug flags 0x4fff.
iconv.c:337:tds_iconv_open(0x91d3a98, UTF-8)
iconv.c:197:local name for ISO-8859-1 is ISO-8859-1
iconv.c:197:local name for UTF-8 is UTF-8
iconv.c:197:local name for UCS-2LE is UCS-2LE
iconv.c:197:local name for UCS-2BE is UCS-2BE
iconv.c:365:setting up conversions for client charset "UTF-8"
iconv.c:367:preparing iconv for "UTF-8" <-> "UCS-2LE" conversion
iconv.c:408:preparing iconv for "ISO-8859-1" <-> "UCS-2LE" conversion
iconv.c:411:tds_iconv_open: done
net.c:225:Connecting to XXXX port 1433 (TDS version 7.0)
net.c:281:tds_open_socket: connect(2) returned "Operation now in progress"
net.c:321:tds_open_socket() succeeded
util.c:156:Changed query state from DEAD to IDLE
login.c:771:quietly sending TDS 7+ login packet
token.c:328:tds_process_login_tokens()
net.c:608:Received header
0000 04 01 00 78 00 49 01 00-                        |...x.I..|

net.c:662:Received packet
0000 04 01 00 78 00 49 01 00-aa 64 00 18 48 00 00 01 |...x.I.. .d..H...|
0010 0e 1f 00 4c 00 6f 00 67-00 69 00 6e 00 20 00 66 |...L.o.g .i.n. .f|
0020 00 61 00 69 00 6c 00 65-00 64 00 20 00 66 00 6f |.a.i.l.e .d. .f.o|
0030 00 72 00 20 00 75 00 73-00 65 00 72 00 20 00 27 |.r. .u.s .e.r. .'|
0040 00 63 00 61 00 6c 00 76-00 69 00 6e 00 27 00 2e |.X.X.X.X .X.X.'..|
0050 00 0d 4e 00 45 00 54 00-4d 00 49 00 4e 00 49 00 |..Y.Y.Y. Y.Y.Y.Y.|
0060 4e 00 47 00 44 00 41 00-54 00 41 00 00 01 00 fd |Y.Y.D.A. T.A.....|
0070 02 00 00 00 00 00 00 00-                        |........|

token.c:337:looking for login token, got  aa(ERROR)
token.c:122:tds_process_default_tokens() marker is aa(ERROR)
token.c:2710:tds_process_msg() reading message 18456 from server
token.c:2783:tds_process_msg() calling client msg handler
dbutil.c:85:_dblib_handle_info_message(0x90180e8, 0x91d3a98, 0xbf8f56d0)
dbutil.c:86:msgno 18456: "Login failed for user 'XXXX'."
token.c:2796:tds_process_msg() returning TDS_SUCCEED
token.c:337:looking for login token, got  fd(DONE)
token.c:122:tds_process_default_tokens() marker is fd(DONE)
token.c:2461:tds_process_end: more_results = 0
        was_cancelled = 0
        error = 1
        done_count_valid = 0
token.c:2477:tds_process_end() state set to TDS_IDLE
token.c:2492:                rows_affected = 0
token.c:437:tds_process_login_tokens() returning TDS_FAIL
login.c:462:login packet accepted
util.c:156:Changed query state from IDLE to DEAD
util.c:331:tdserror(0x90180e8, 0x91d3a98, 20002, 0)
dblib.c:7861:dbperror(0x91d3378, 20002, 0)
dblib.c:7913:20002: "Adaptive Server connection failed"
dblib.c:7934:"Adaptive Server connection failed", client returns 2 (INT_CANCEL)
util.c:361:tdserror: client library returned TDS_INT_CANCEL(2)
util.c:384:tdserror: returning TDS_INT_CANCEL(2)
dblib.c:1415:dbclose(0x91d3378)
dblib.c:258:dblib_del_connection(0x997340, 0x91d3a98)
mem.c:615:tds_free_all_results()
dblib.c:305:dblib_release_tds_ctx(1)
dblib.c:5828:dbfreebuf(0x91d3378)
dblib.c:724:dbloginfree(0x91d2f90)
dblib.c:3985:dbsetlogintime(5)
dblib.c:3944:dbsettime(60)
dblib.c:698:dblogin(void)
dblib.c:4890:dberrhandle(0x81a1fd0)
dblib.c:4909:dbmsghandle(0x81a35d0)
dblib.c:746:dbsetlname(0x91d2f90, UTF-8, 10)
dblib.c:746:dbsetlname(0x91d2f90, PHP 5, 5)
dblib.c:1121:dbopen(0x91d2f90, 0x0, [microsoft])

(те же учетные данные вводят меня с tsql)

Любая помощь приветствуется.

спасибо Эндрю

ps: некоторый вывод tsql -C

Compile-time settings (established with the "configure" script)
                            Version: freetds v0.83.dev.20100710
             freetds.conf directory: /usr/local/freetds/etc
     MS db-lib source compatibility: yes
        Sybase binary compatibility: no
                      Thread safety: yes
                      iconv library: yes
                        TDS version: 5.0
                              iODBC: no
                           unixodbc: yes

Решено. Надо было использовать стабильный выпуск. 0.8.2 поддерживает tds 8.0, 0.8.3 - нет. ага.

что, кстати, до сих пор не объясняет, почему я смог подключиться к своему серверу mssql с помощью tsql, используя протокол 7.1, но не с помощью php5-mssql.