Не удается подключиться к MSSQL с помощью PHP в IIS

#php #sql-server #iis #odbc-sql-server-driver

#php #sql-сервер #iis #odbc-sql-server-driver

Вопрос:

Я ищу решение уже 2 дня. Я получаю следующий эффект:

    array(2) {
  [0] => array(6) {
    [0] => string(5) "IMSSP"
    ["SQLSTATE"] => string(5) "IMSSP"
    [1] => int(-49)
    ["code"] => int(-49)
    [2] => string(390) "This extension requires either the Microsoft SQL Server 2008 Native Client (SP1 or later) or the Microsoft SQL Server 2008 R2 Native Client ODBC Driver to communicate with SQL Server.  Neither of those ODBC Drivers are currently installed. Access the following URL to download the Microsoft SQL Server 2008 R2 Native Client ODBC driver for x86: http://go.microsoft.com/fwlink/?LinkId=163712"
    ["message"] => string(390) "This extension requires either the Microsoft SQL Server 2008 Native Client (SP1 or later) or the Microsoft SQL Server 2008 R2 Native Client ODBC Driver to communicate with SQL Server.  Neither of those ODBC Drivers are currently installed. Access the following URL to download the Microsoft SQL Server 2008 R2 Native Client ODBC driver for x86: http://go.microsoft.com/fwlink/?LinkId=163712"
  }
  [1] => array(6) {
    [0] => string(5) "IM002"
    ["SQLSTATE"] => string(5) "IM002"
    [1] => int(0)
    ["code"] => int(0)
    [2] => string(91) "[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified"
    ["message"] => string(91) "[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified"
  }
}
  

Похоже, что нет «собственного клиента Microsoft SQL Server 2008 R2», но он есть!

Я уже использовал ту же конфигурацию на своем локальном компьютере и тестовом сервере. Я получал ту же ошибку на локальном компьютере, когда не был установлен «Собственный клиент Microsoft SQL Server 2008 R2». После его установки проблема была решена.

К сожалению, здесь я не вижу никаких изменений.

Я пробовал разные драйверы PHP и sqlsrv, но это не дало никакого эффекта.

Я не могу много экспериментировать, потому что это живой сервер.

Как я могу заставить это работать? Это как-то связано с настройками ODBC панели управления? Также установлен другой собственный клиент, но я не могу удалить его с этого текущего сервера.

Как прочитать эту информацию? Видит ли драйвер php sqlsrv собственный клиент вообще?

Редактировать

Проблема в том, что я использую все 32-разрядные версии. Собственный драйвер также показан в панели управления ODBC. Расширение Sqlsrv для PHP также работает, как показано в phpinfo.

Как это возможно, что расширение sqlsrv для PHP не «видит» этот собственный клиент?

Я бессилен, и теперь я настраиваю виртуальную машину, где я установлю точно такую же конфигурацию, как на веб-сервере, и проведу несколько более смелых экспериментов.

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

1. Если вы используете 64-разрядный хост Windows, помните, что там будет как 32-разрядная, так и 64-разрядная панель управления ODBC с разными драйверами. Если ваш PHP 32-разрядный, и у вас есть только 64-разрядный драйвер R2, то PHP будет казаться, что драйвера нет.

2. Вам необходимо установить все драйверы из 1 из этих пакетов: Driver pack for x86 (32-разрядный). Или пакет драйверов для x64 (64-разрядный).

3. Какую версию расширения sqlsrv PHP вы используете? т.е. каково имя PHP/ext/php_sqlsrv_xxx.dll файла?

Ответ №1:

Установите 32-и 64-разрядные драйверы на сервер. 32-разрядная панель управления odbc расположена в каталоге Windows SysWOW64 — не совсем очевидно, но это все. Убедитесь, что у вас есть драйверы для вашего исполняемого файла (PHP) — если он 32-разрядный, вам нужны 32-разрядные драйверы.

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

1. Проблема в том, что я использую everyting в 32-разрядном формате. Собственный драйвер также показан в панели управления ODBC. Расширение Sqlsrv для PHP также работает, как показано в phpinfo. Как это возможно, что расширение sqlsrv для PHP не «видит» этот собственный клиент? Я бессилен, и теперь я настраиваю виртуальную машину, где я установлю точно такую же конфигурацию, как на веб-сервере, и проведу несколько более смелых экспериментов.

2. Что насчет этой ошибки? [Microsoft] [Диспетчер драйверов ODBC] Имя источника данных не найдено, и драйвер по умолчанию не указан. Вы создали DSN для того, что пытаетесь сделать? Возможно, вы могли бы немного подробнее объяснить свою ситуацию.

3. теперь я знаю, что это что-то о разрешениях, в прошлом была какая-то проблема с пользователями Интернета на этом сервере, и теперь есть 2 пользователя Интернета, возможно, это проблема

4. Проверьте журналы SQL, чтобы увидеть, получаете ли вы там ошибки, но я бы сомневался в этом, похоже, у вас проблемы на уровне ниже этого.

Ответ №2:

Похоже, у вас та же проблема, что и у меня на этой неделе

Я загрузил Process Monitor и следовал инструкциям в этом сообщении

http://www.iislogs.com/articles/processmonitorw3wp/

Затем я увидел процесс w3wp.exe в этом разделе реестра было отказано в доступе

HKLM Software ODBC ODBCINST.Собственный клиент INI SQL 10.0

Я открыл RegEdit и перешел к этому ключу.

Я щелкнул правой кнопкой мыши -> Разрешения и добавил сетевую службу в список и предоставил ей разрешения на чтение.

Переработал пул приложений, и теперь он работает!

Надеюсь, это поможет.

Приветствую, Феде

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

1. Fede! Я только что заметил, что вы ответили на мой вопрос, ха-ха