2013-02-27 3 views
3

Мне нужно подключиться к удаленному серверу MSSQL с помощью PHP. Я успешно подключился с помощью dblib, но у него есть довольно «неприятные» ограничения.Альтернатива, необходимая для подключения PDO при использовании MSSQL через dblib

Я обнаружил, что он не может получить строки столбцов, которые находятся в формате ntext, для этого есть простой способ обхода, но он ограничивает вывод (преобразование ntext в nvarchar через запрос), я тогда заметил, что он также имеет проблемы извлечения строк в десятичном формате (или, похоже, к сожалению, общая ошибка 4004, брошенная для всего, не очень помогает).

Существует слишком много хакеров, необходимых для моего удобства, есть ли лучший способ приблизиться к этому, может быть, другая библиотека db, которую я должен изучить в своем соединении?

Стоит отметить, что я использовал mssql_ * с большим успехом, но это, очевидно, не идеальный подход, и я хочу продолжать использовать PDO.


Стоит отметить;

Я бегу на Debian, и я знаю, что Microsoft выпустила драйверы для ODBC, но их загрузки драйверов прослушиваются и, таким образом, не работает (по крайней мере, не на системах, отличных от RHEL, кажется)

+0

Можете ли вы разместить свой конфигурационный файл FreeTDS? –

+0

Конечно; http://pastebin.com/ATQSF3sg – Clorith

+0

Если вы измените версию tds на 8.0, это имеет значение? 'tds version = 8.0' –

ответ

2

Do не используйте драйвер dblib/mssql:.

Если вы находитесь на окнах, используйте sqlsrv: driver. (Вам необходимо загрузить некоторые DLL - инструкции, связанные.)

Если вы используете unix, используйте PDO odbc: driver, предпочтительно, unixODBC. На Debian и Ubuntu вы можете получить этот драйвер с простым apt-get install php5-odbc.

+0

У меня нет этого драйвера, и из того, что мне сказали, это драйвер для Windows, я, наверное, должен был упомянуть, что я на Debian. – Clorith

+0

О, тогда используйте ODBC. –

+0

Я бы с удовольствием, но драйверы Microsoft ODBC - это единственные, которые я нашел, и они предназначены только для RHEL (попробовал работать на debian, не работал) – Clorith

0

Когда я выполняю:

TDSDUMPCONFIG=stdout TDSDUMP=stdout tsql -S <name in TDS.conf> -U '<domain>\<username>' -p 1443 -P <password> 

я получаю это:

log.c:196:Starting log file for FreeTDS 0.91 
     on 2013-03-22 15:55:50 with debug flags 0x4fff. 
config.c:185:Getting connection information for [XXX]. 
config.c:189:Attempting to read conf files. 
config.c:354:... $FREETDSCONF not set. Trying $FREETDS/etc. 
config.c:367:... $FREETDS not set. Trying $HOME. 
config.c:293:Could not open '/home/hillb/.freetds.conf' ((.freetds.conf)). 
config.c:297:Found conf file '/etc/freetds/freetds.conf' (default). 
config.c:483:Looking for section global. 
config.c:540: Found section global. 
config.c:543:Got a match. 
config.c:565: text size = '64512' 
config.c:540: Found section egserver50. 
config.c:540: Found section egserver70. 
config.c:540: Found section XXX. 
config.c:554: Reached EOF 
config.c:483:Looking for section XXX. 
config.c:540: Found section global. 
config.c:540: Found section egserver50. 
config.c:540: Found section egserver70. 
config.c:540: Found section XXX. 
config.c:543:Got a match. 
config.c:565: host = 'XXX' 
config.c:595:Found host entry XXX. 
config.c:599:IP addr is xxx.xxx.xxx.xxx. 
config.c:565: port = '1433' 
config.c:565: tds version = '8.0' 
config.c:788:Setting tds version to 8.0 (0x701) from $TDSVER. 
config.c:554: Reached EOF 
config.c:301:Success: [XXX] defined in /etc/freetds/freetds.conf. 
config.c:714:Setting 'dump_file' to 'stdout' from $TDSDUMP. 
config.c:224:Final connection parameters: 
config.c:225:   server_name = XXX 
config.c:226:  server_host_name = XXX 
config.c:227:    ip_addr = xxx.xxx.xxx.xxx 
config.c:228:   instance_name = 
config.c:229:     port = 1433 
config.c:230:   major_version = 7 
config.c:231:   minor_version = 1 
config.c:232:    block_size = 0 
config.c:233:    language = us_english 
config.c:234:   server_charset = 
config.c:235:  connect_timeout = 0 
config.c:236:  client_host_name = x 
config.c:237:   client_charset = UTF-8 
config.c:238:    app_name = TSQL 
config.c:239:    user_name = <domain>\<username> 
config.c:242:    library = TDS-Library 
config.c:243:    bulk_copy = 0 
config.c:244:  suppress_language = 0 
config.c:245:   encrypt level = 0 
config.c:246:   query_timeout = 0 
config.c:249:    database = 
config.c:250:    dump_file = stdout 
config.c:251:   debug_flags = 0 
config.c:252:    text_size = 64512 
config.c:253:   broken_dates = 0 
config.c:254:  emul_little_endian = 0 
config.c:255:  server_realm_name = 
log.c:196:Starting log file for FreeTDS 0.91 
     on 2013-03-22 15:55:50 with debug flags 0x4fff. 
locale is "en_US.UTF-8" 
locale charset is "UTF-8" 
using default charset "UTF-8" 
iconv.c:330:tds_iconv_open(0x98cb9e8, UTF-8) 
iconv.c:187:local name for ISO-8859-1 is ISO-8859-1 
iconv.c:187:local name for UTF-8 is UTF-8 
iconv.c:187:local name for UCS-2LE is UCS-2LE 
iconv.c:187:local name for UCS-2BE is UCS-2BE 
iconv.c:349:setting up conversions for client charset "UTF-8" 
iconv.c:351:preparing iconv for "UTF-8" <-> "UCS-2LE" conversion 
iconv.c:391:preparing iconv for "ISO-8859-1" <-> "UCS-2LE" conversion 
iconv.c:394:tds_iconv_open: done 
net.c:205:Connecting to xxx.xxx.xxx.xxx port 1433 (TDS version 7.1) 
net.c:270:tds_open_socket: connect(2) returned "Operation now in progress" 
net.c:310:tds_open_socket() succeeded 
util.c:156:Changed query state from DEAD to IDLE 
net.c:741:Sending packet 

[шестигранные отвалы отредактированный]

token.c:555:processing result tokens. marker is fd(DONE) 
token.c:2339:tds_process_end: more_results = 0 
       was_cancelled = 0 
       error = 0 
       done_count_valid = 0 
token.c:2355:tds_process_end() state set to TDS_IDLE 
util.c:156:Changed query state from READING to IDLE 
token.c:2370:    rows_affected = 0 
util.c:104:logic error: cannot change query state from IDLE to PENDING 
token.c:540:tds_process_tokens(0x98cb9e8, 0xbf82fb48, 0xbf82fb4c, 0x100) 
token.c:543:tds_process_tokens() state is COMPLETED 
locale is "en_US.UTF-8" 
locale charset is "UTF-8" 
using default charset "UTF-8" 

Что именно вы ищете?

Смежные вопросы