Неустранимая ошибка: Вызов неопределенной функции sqlsrv connect()
Я наткнулся на довольно много сообщений, касающихся одного и того же вопроса, однако я все еще не могу его решить, и поэтому я спрашиваю. Я пытаюсь подключиться к sql в своем php-скрипте. Моя строка подключения:
/* 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
? Есть какие-нибудь указания?
ПРАВКА 2: Я вообще не вижу раздела sqlsrv
при запуске phpinfo()
, хотя я добавил extension=php_sqlsrv_54_ts.dll
в файл php.ini
, расположенный в папке bin сервера wamp.
5 answers
Это помогло мне получить ответ. В моем случае есть два файла 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
При установке сторонних расширений вам необходимо убедиться, что все параметры компиляции совпадают:
- Версия 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
в выводе команды:
[Модули PHP]
bcmath
календарь
Ядро
[...]
СПЛ
sqlsrv
стандартный
[...]
Если вы используете Драйверы Microsoft 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 версии 2.0 драйвер работает с PHP 5.2.4 или более поздней версии, но не с PHP 5.4. Если возможно, используйте PHP 5.2.13 или более поздней версии.
Затем используйте PHP-менеджер, чтобы добавить загруженные драйверы в файл php config
.Вы можете сделать это, как показано ниже (просмотрите файлы и нажмите OK).
Затем перезапустите сервер IIS
Если этот метод не работает, пожалуйста, измените версию php и попробуйте запустить свой php-скрипт.
Чтобы изменить php version
на более низкий и попытаться понять, что произошло.затем вы можете загрузить соответствующие драйверы, выполнив описанные выше действия.
Сначала проверьте, правильно ли загружено расширение в phpinfo();
(должно появиться что-то вроде sqlsrv
). Если нет, расширение загружено неправильно. Вам также необходимо перезапустить apache после установки расширения.
У меня то же самое, потому что в httpd.conf в apache PHPIniDir D:/wamp/bin/php/php5.5.12
это было неверно