Подключение MSSQL-сервера через Zend Framework с использованием библиотеки FreeTDS

#php #sql-server #linux #zend-framework #freetds

#php #sql-сервер #linux #zend-framework #freetds

Вопрос:

Я пытаюсь подключиться к серверу MSSQL, но у меня возникают некоторые трудности. Во-первых, мой сервер выдает следующую ошибку:

Сообщение: SQLSTATE[HY000] Не удается подключиться: Адаптивный сервер недоступен или не существует (степень серьезности 9)

Что ж, я думаю, что установил FreeTDS успешно, потому что каждая проверка, которую я сделал, показывает мне, что все в порядке.

Конфигурации MSSQL:

Конфигурации MSSQL

Конфигурация PDO:

Конфигурация PDO

Моя попытка подключиться:

 [local : production]
resources.db.adapter = "pdo_mssql"
resources.db.params.pdoType = "dblib"
resources.db.params.charset = "utf8"
resources.db.isDefaultTableAdapter = true
resources.db.params.driver_options.ReutlocarnDatesAsStrings = true
resources.db.params.dbname = "database"
resources.db.params.host = "server-ip"
resources.db.params.username = "user"
resources.db.params.password = "password"
  

Модули, которые они установили

 rodrigo@thx1138 ~   [15:51:16] 
$ php -m | grep "mssql"
mssql

rodrigo@thx1138 ~ [15:51:28] 
$ php -m | grep "pdo_"                                                                                                                                                                                                                     
pdo_dblib
pdo_mysql
  

Мой freetds.config:http://pastebin.com/qA0XwFVD

Мой вывод nmap

 Starting Nmap 6.40 ( http://nmap.org ) at 2014-07-02 17:48 BRT
Nmap scan report for host (IP)
Host is up (0.00049s latency).
Not shown: 919 filtered ports, 74 closed ports
PORT     STATE SERVICE
21/tcp   open  ftp
25/tcp   open  smtp
80/tcp   open  http
139/tcp  open  netbios-ssn
1433/tcp open  ms-sql-s
3128/tcp open  squid-http
3389/tcp open  ms-wbt-server
  

Это мои настройки freetds

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

И когда я пытаюсь подключиться через FreeTDS, появляется ошибка:

 rodrigo@thx1138 ~ 
> $ tsql -S server-ip -U user
Password: 
locale is "LC_CTYPE=en_US.UTF-8;LC_NUMERIC=pt_BR.UTF-8;LC_TIME=pt_BR.UTF-8;LC_COLLATE=en_US.UTF-8;LC_MONETARY=pt_BR.UTF-8;LC_MESSAGES=en_US.UTF-8;LC_PAPER=pt_BR.UTF-8;LC_NAME=pt_BR.UTF-8;LC_ADDRESS=pt_BR.UTF-8;LC_TELEPHONE=pt_BR.UTF-8;LC_MEASUREMENT=pt_BR.UTF-8;LC_IDENTIFICATION=pt_BR.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
Error 20009 (severity 9):
    Unable to connect: Adaptive Server is unavailable or does not exist
    OS error 111, "Connection refused"
There was a problem connecting to the server
  

На самом деле несколько месяцев назад я уже выполнил успешную установку, но, честно говоря, не знаю, что я сделал, и, к сожалению, мне пришлось отформатировать свой компьютер, поэтому моя проблема в том, что я не могу сделать это снова. Я думаю, что моя проблема между моим dblib и FreeTDS , но не могу найти, что я делаю неправильно. Заранее спасибо за любую помощь.

Ubuntu: 14.04 Версия PHP 5.5.9-1ubuntu4.2

Ответ №1:

При использовании -S флага для tsql вам необходимо указать название серверной секции в вашем freetds.conf файле. В вашем файле вы определили серверы с именами egServer50 и localhost . Если вы хотите использовать IP-адрес напрямую, вы должны использовать -H флаг вместе с -p flag, а не -S флаг.

Комментарии:

1. Спасибо вам за ваш ответ. На самом деле я неправильно использовал tsql инструмент, но теперь я получаю это Error 20017 (severity 9): Unexpected EOF from the server OS error 115, "Operation now in progress" Error 20002 (severity 9): Adaptive Server connection failed There was a problem connecting to the server

2. Просто для большей ясности. Моя проблема заключается в моей связи с PHP. Я пытался протестировать свое соединение с tsql и заметил, что не могу подключиться к своему серверу.

3. Можете ли вы показать PHP-код, с помощью которого вы пытаетесь подключиться?

4. На самом деле нет. Но я использую Zend Framework, так что наверху есть мои настройки подключения. Но эта проблема приведет к сбою любой части моего кода, где мне нужно использовать мои модели.

5. ОК. Просматривая мою единственную рабочую установку pdo_mssql, я также установил имя хоста в freetds.conf раздел server. Итак, вы бы установили resources.db.params.host в качестве одного из названий раздела в вашем freetds.conf файле, например, либо egServer50 , либо localhost .