Подтвердить что ты не робот

Неустранимая ошибка: вызов функции undefined sqlsrv_connect()

Я столкнулся с довольно несколькими сообщениями по одному и тому же вопросу, однако я все еще не могу его разрешить, и поэтому я спрашиваю. Я пытаюсь подключиться к sql в моем php script. Моя строка подключения:

/* Specify the server and connection string attributes. */
$serverName = "xxx-PC\SQLExpress";
$connectionOptions = array("Database"=>"Salesforce");
$conn = sqlsrv_connect($serverName, $connectionOptions);
if($conn === false)
{
      die(print_r(sqlsrv_errors(), true));
}

Я установил и включил следующее в мой файл php.ini, расположенный под папкой wamp: C:\wamp\bin\php\php5.4.16:

extension=c:/wamp/bin/php/php5.4.16/ext/php_sqlsrv_53_ts.dll

Мой wampserver работает нормально, а также службы wampapache и wampsqld. Я могу успешно выполнить php.exe. Однако я не могу установить соединение с SQL Server 2008 R2, где находится моя база данных. Пожалуйста, помогите!

РЕДАКТИРОВАТЬ 1: сервер wamp запускает службу wampmysql, пока я пытаюсь подключиться к SQL Server 2008 R2. Может ли это быть причиной? Должен ли я использовать MySQL вместо SQL? Любые указатели?

EDIT 2: я вообще не вижу раздел sqlsrv при запуске phpinfo(), хотя я добавил extension=php_sqlsrv_54_ts.dll в файл php.ini, расположенный в папке bin на сервере Wamp.

enter image description here

4b9b3361

Ответ 1

Это помогло мне ответить на мой вопрос. Есть два файла php.ini, которые, в моем случае, для wamp. Один находится под папкой php, а другой - в папке C:\wamp\bin\apache\Apachex.x.x\bin. При подключении к SQL с помощью функции sqlsrv_connect мы ссылаемся на файл php.ini в папке apache. Добавьте следующий файл (в соответствии с вашей версией) в этот файл:

extension=c:/wamp/bin/php/php5.4.16/ext/php_sqlsrv_53_ts.dll

Ответ 2

При установке сторонних расширений необходимо убедиться, что все параметры компиляции совпадают:

  • Версия PHP
  • Архитектура (32/64 бита)
  • Компилятор (VC9, VC10, VC11...)
  • Безопасность потоков

Общие глюки включают в себя:

  • Редактирование неправильного файла php.ini (что типично для пакетов); правильный путь показан в phpinfo().
  • Забыл перезапустить Apache.
  • Невозможность увидеть ошибки при запуске; они должны отображаться в журналах Apache, но вы также можете использовать командную строку для диагностики, например:

    php -d display_startup_errors=1 -d error_reporting=-1 -d display_errors -c "C:\Path\To\php.ini" -m
    

Если все в порядке, вы должны увидеть sqlsrv в выводе команды и/или phpinfo() (в зависимости от того, какой SAPI вы настраиваете):

[Модули PHP]
BCMath
календарь
Основные
[...]
SPL
SQLSRV
стандарт
[...]

phpinfo()

Ответ 3

Если вы используете Microsoft Drivers 3.1, 3.0 и 2.0. Пожалуйста, проверьте версию PHP, уже установленную с IIS.

Используйте этот скрипт для проверки версии php:

<?php echo phpinfo(); ?>

ИЛИ

Если вы установили PHP Manager в IIS с помощью установщика веб-платформы, вы можете проверить его версию.

Тогда:
 Если вы используете новую версию PHP (5.6), пожалуйста, загрузите драйверы отсюда

 Для версии PHP ниже 5.6 - пожалуйста, загрузите драйверы отсюда

  • Драйвер PHP версии 3.1 требует PHP 5.4.32 или PHP 5.5.16 или новее.
  • Драйвер PHP версии 3.0 требует PHP 5.3.0 или выше. Если возможно, используйте PHP 5.3.6 или более поздняя версия.
  • Драйвер PHP Driver версии 2.0 работает с PHP 5.2.4 или новее, но не с PHP 5.4. Если возможно, используйте PHP 5.2.13 или более позднюю версию.

Затем с помощью диспетчера PHP добавьте загруженные драйверы в файл php config. Вы можете сделать это, как показано ниже (просмотрите файлы и нажмите OK). Затем перезапустите сервер IIS

enter image description here

Если этот метод не работает, измените версию php и попробуйте запустить скрипт php. enter image description here

Совет: измените php version на более низкий и попытайтесь понять, что произошло. Затем вы можете загрузить соответствующие драйверы.

Ответ 4

Сначала убедитесь, что расширение правильно загружено в phpinfo(); (должно появиться что-то вроде sqlsrv). Если нет, расширение неправильно загружено. Вам также необходимо перезапустить apache после установки расширения.

Ответ 5

У меня такое же, потому что в httpd.conf в apache PHPIniDir D:/wamp/bin/php/php5.5.12 это было неверно

Ответ 6

Поделиться некоторыми из моих выводов:

  1. Архитектура имеет значение (x86/x64)
  2. Версия PHP очень важна
  3. Должен быть установлен соответствующий драйвер SQL.
  4. Обратитесь по этой ссылке, чтобы узнать, поддерживает ли ваша версия PHP драйвер (см. Первую таблицу).
  5. Обратитесь к ответу Роба, чтобы найти свою архитектуру и TS/NTS (потокобезопасный/не потоковый) вашего PHP. Это его блог.
  6. Вот что сработало для меня: я попробовал с Wampp - 64bit, Selected PHP 7.0.10 скачал MYSQL Driver version 5.3 (Примечание: обратитесь к таблице я mentioned- 4-й пункт, чтобы получить правильную версию)
  7. Сохранено только 64-битный TS (php_sqlsrv_7_ts_x64.dll, php_pdo_sqlsrv_7_ts_x64.dll), потому что мой php был безопасным для потоков (вы можете найти свой, ссылаясь на 5-ю точку) в папку E:\wamp64\bin\php\php7.0.10\ext.
  8. Добавлено расширение = php_sqlsrv_7_ts_x64.dll и расширение = php_pdo_sqlsrv_7_ts_x64.dll в файл php.ini, выбранный из меню wampp (E:\wamp64\bin\apache\apache2.4.23\bin\php.ini).
  9. Перезапустил Wampp, и все работает отлично.
  10. Для тех, кто сталкивается с вызовом неопределенной функции, sqlsrv_connect() также может следовать этой методике.