Установка SQLSRV 3.0 - неопределенная функция sqlsrv_connect() IIS, php5.4.3,

Я прочитал (и попробовал) все сообщения, которые смог найти, но не повезло. phpinfo не показывает sqlsrv, но папка ext правильная (проверена) и dll есть.

extension=php_pdo.dll //which I don't think is actually needed for this version
extension=php_sqlsrv_53_nts.dll
extension=php_pdo_sqlsrv_53_nts.dll

Они находятся в c:/PHP/ext
Используя FastCGI, перезапустил IIS, а также весь сервер.
Эта версия PHP (X86) и MSSQL10_50.SQLEXPRESS была установлена ​​и работает уже год.

Windows Server 2008 R2
PHPINFO
Компилятор: MSVC9 (Visual C++ 2008)
Сборка расширения PHP: API20100525,NTS,VC9

Однако в PHPINFO я вижу это в команде Configure:

"--without-mssql" "--without-pdo-mssql" 

Только что нашел и добавил:

extension=php_sqlsrv_30_53_nts_vc9x86.dll
extension=php_pdo_sqlsrv_30_53_nts_vc9x86.dll 

Затем:

extension_dir="C:\PHP\ext" 

поэтому я знаю, что правильно установил dll

Любая помощь будет принята с благодарностью - два дня на это пока!


person dcass    schedule 09.08.2013    source источник
comment
Переустановил PHP, установил и работает sqlsrv. Однако на самом деле не обновляет базу данных, хотя и говорит об этом. Этот код выдает Updated, но база данных не обновляется:   -  person dcass    schedule 20.08.2013
comment
for ($i=0; $i ‹= $ectr; $i++) { $serverName = XXXXX\SQLEXPRESS; $connectionInfo = array( Database=›XXXX, UID=›xxxxx, PWD=›xxxxx ); $conn = sqlsrv_connect($serverName, $connectionInfo); if($conn === false) { die(print_r(sqlsrv_errors(), true)); } $sql = выберите * из CampaignStats, где var0='$campaign_id' и var1='$sent[$i]'; $stmt = sqlsrv_query($conn, $sql);   -  person dcass    schedule 20.08.2013
comment
if( $stmt === false ) { $sql = ВСТАВИТЬ В CampaignStats (Var0,Var1,Var2,Var3,Var4,Var5,Var6,Var7) VALUES('$campaign_id','$sent[$i]',' $open[$i]','$блокировано[$i]','$отправлено[$i]','$спам[$i]', '$клик[$i]', '$статус[$i ]'); } else { $sql = UPDATE CampaignStats set Var0='$campaign_id',Var1='$sent[$i]',Var2='$open[$i]', Var3='$blocked[$i]', Var4 ='$bounced[$i]', Var5='$spam[$i]', Var6='$click[$i]', Var7='$status[$i]', где var0='$campaign_id' и var1='$отправлено[$i]'; }   -  person dcass    schedule 20.08.2013
comment
$stmt = sqlsrv_query($conn, $sql); if( $stmt === false ) { echo Не обновляется‹BR›; } else { echo Обновлено‹BR›; } sqlsrv_close($conn); }   -  person dcass    schedule 20.08.2013


Ответы (1)


Недавно я обновил свой драйвер PHP и sqlsrv. Вот что я сделал для части SQLSRV:

Во-первых, мой phpinfo() дает:

PHP Version 5.5.1
System: Windows NT HOSTNAME 6.1 build 7601 (Windows 7 Business Edition Service Pack 1) i586
Build Date: Jul 18 2013 10:37:55 
Compiler: MSVC11 (Visual C++ 2012) 
Architecture: x86 


Configure Command
cscript /nologo configure.js "--enable-snapshot-build" "--enable-debug-pack" "--disable-zts" "--disable-isapi" "--disable-nsapi" "--without-mssql" "--without-pdo-mssql" "--without-pi3web" "--with-pdo-oci=C:\php-sdk\oracle\instantclient10\sdk,shared" "--with-oci8=C:\php-sdk\oracle\instantclient10\sdk,shared" "--with-oci8-11g=C:\php-sdk\oracle\instantclient11\sdk,shared" "--with-enchant=shared" "--enable-object-out-dir=../obj/" "--enable-com-dotnet=shared" "--with-mcrypt=static" "--disable-static-analyze" "--with-pgo" 

Затем я установил драйверы SQLSRV в C:\Program Files (x86)\PHP\ext файлы и добавил в php.ini:

[PHP_SQLSRV]
extension=php_sqlsrv_53_nts_vc9.dll 
[PHP_PDOSQLSRV]
extension=php_pdo_sqlsrv_53_nts_vc9.dll

и это работает. Хотя я не вызываю функции напрямую (я использую Yii framework), у меня также было изменение DSN:

sqlsrv:Server=hostname_or_ip;Database=your_database_name;

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

РЕДАКТИРОВАТЬ

Я скачал экспериментальные/неофициальные драйверы sqlsrv для PHP 5.5 с сайта http://social.msdn.microsoft.com/Forums/sqlserver/en-US/e1d37219-88a3-46b2-a421-73bfa33fe433/unofficial-php-55-drivers-x86 и обновил мою конфигурацию на:

[PHP_SQLSRV]
extension=php_sqlsrv_55_nts.dll 
[PHP_PDOSQLSRV]
extension=php_pdo_sqlsrv_55_nts.dll

Найдено из: https://stackoverflow.com/a/17390741/2236500

person Phil    schedule 09.08.2013
comment
Где вы нашли extension=php_sqlsrv_53_nts_vc9.dll? Я не могу найти это ни в одной загрузке, которую я пробовал. - person dcass; 09.08.2013
comment
comment
comment
Этих файлов нет в этой загрузке - мне нужны php_sqlsrv_53_nts_vc9.dll и php_pdo_sqlsrv_53_nts_vc9.dll - person dcass; 10.08.2013
comment
Нашел и попробовал extension=php_sqlsrv_53_nts_vc9.dll extension=php_pdo_sqlsrv_53_nts_vc9.dll Но все та же ошибка - все еще не отображается в phpinfo(). - person dcass; 10.08.2013
comment
Есть ли другой способ установить соединение PHP с MS SQL, а не sqlsrv, который, очевидно, чрезвычайно сложно заставить работать (если он вообще работает, исходя из количества сообщений, которые я вижу)? - person dcass; 10.08.2013
comment
Вы пытались открыть командную строку и запустить php -i? Может быть причина, по которой appart PHP не загружает DLLS - например, IIS использует другой php.ini или что-то в этом роде. - person Phil; 10.08.2013
comment
Я изменил некоторые настройки в php.ini, чтобы убедиться, что они у меня правильные. Происходит что-то еще - возможно, перезапуск IIS не перезапускает PHP или у меня нет подходящих DLL для Windows 2008 R2 - но я пробовал nts, ts, VC6, VC9 - в основном все, что я мог найти. Возможно, нужны другие DLL - я прочитал один пост о том, что для того, чтобы это работало, нужно было установить множество других DLL, которые, казалось, не имели связи. Собственный клиент SQL Server 10.0 уже установлен. Может ли кто-нибудь сказать мне, поможет ли что-нибудь из этого? microsoft.com/en-us/download/details.aspx? идентификатор=16978 - person dcass; 11.08.2013
comment
Хорошо - я сделал php -i, и он говорит, что программа не может запуститься, потому что на вашем компьютере отсутствует php5ts.dll - теперь я начинаю думать, что php установлен неправильно. Тогда это неправильная версия, но PHPINFO() говорит: Компилятор: MSVC9 (Visual C++ 2008) Сборка расширения PHP: API20100525,NTS,VC9 - person dcass; 12.08.2013
comment
У меня есть 3 папки php из-за попыток установки и обновлений - как узнать, какая из них работает в IIS? - person dcass; 12.08.2013
comment
Хорошо - вот факты. Я поместил php5ts.dll в c:/php/ext, потому что его там не было, и когда я щелкнул php.exe, он попросил это. Однако я не уверен, что установлен php.exe, потому что есть 3 папки с разными версиями php - я даже не уверен, что php вообще установлен. Я только знаю, что IIS использует php_cgi.exe. Я обновляю правильный php.ini - я выключаю и включаю display_errors, и это отражается на phpinfo(). - person dcass; 12.08.2013
comment
Я обновил php.ini с помощью: extension=php_pdo.dll extension=php_sqlsrv_53_nts.dll extension=php_pdo_sqlsrv_53_nts.dll Я поместил dll в правильную папку (C:/php/ext) (до этого не существовало): php_pdo.dll php_pdo_sqlsrv_53_nts .dll php_sqlsrv_53_nts.dll PHPINFO() вообще не упоминает sqlsrv. Я по-прежнему получаю сообщение об ошибке «Вызов неопределенной функции sqlsrv_connect()». Когда я нажимаю на php.exe, я получаю «Невозможно загрузить php_pdo.dll — это недопустимое приложение Win32». - person dcass; 12.08.2013
comment
Буду переустанавливать php5.3 - вижу тут нестыковка. - person dcass; 12.08.2013