mssql, pdo, pdo_mssql и убейте меня

Farsh

~ on ~ high ~ wave ~
windows, mssql, pdo, pdo_mssql и убейте меня

** перекиньте плиз в раздел windows, случайно сюда добавил **

Я просто заканался.
И так, дано:
windows ( прямо сейчас семерка, а вообще server 2003 )
microsoft sql server express 2005

Надо:
подконнектиться через PDO к этому mssql серверу

Хочется:
найти человека, который это сделал

И так, описываю шаги:
1) скачал php 5.3.1 zip архив
2) распаковал в C:\php\php_5.3
3) зашел в папку
4) вижу, что php.ini там нет; переименовываю php.ini-development в php.ini; extension_dir = 'ext'; все extension's отключены
5) php.exe -v не ругается; показывает, что он и есть v5.3.1;
6) php -m показывает, что внутри сидит PDO
7) активируем ext php_mssql ( для начала )
8) php.exe -v не ругается, вроде все норм
9) запускаем скрипт, содержащий
PHP:
   var_dump(mssql_connect('NOTEBOOK\SQLEXPRESS'));
конечно же, все еррор репортинг на on, E_ALL | E_STRICT, лог ошибок on
10) результат - консоль орет, что cli error. Лог пуст.
Отсюда первый вопрос: тестеры php вообще проверяют работу всего этого на windows ?
11) Убираем php_5.3 нахрен
12) Делаем пункты 1-9 для php 5.2; замечаем, что pdo идет как отдельный модуль
13) 10 пункт показывает нам, что все отлично
14) активируем модули PDO и pdo_mssql
15) запускаем скрипт, содержащий
PHP:
  $dsn = 'mssql:host=NOTEBOOK\SQLEXPRESS;dbname=dbname';
  try {
      $pdo = new PDO($dsn);
  } catch (PDOException $e) {
     echo 'Connection failed: ' . $e->getMessage();
  }
16) cli error, ниче не пашет, лог пуст ( полная аналогия php 5.3 + mssql_connect )
17) и что делать ?

Также была замечана уличная магия:
до этого тестировал на подобии этого, и у меня просто не хотел запускаться php с pdo, требовал файла msvcr71.dll ( качал и кидал в папку с php ). Далее просто не коннектилось по каким-то блаблабла причинам, полечилось заменой файла ntwdblib.dll, но только для mssql_connect, PDO просто не коннектился: большое ожидание + ошибка, что с сервером не удалось соединиться.
Сейчас меня этиже дистрибутивы php ничего не просили, хотя тот самый msvcr71.dll я не кидал в какие-либо системные папки.

Вот расскажите, кто тут мудак ?

Мне нужно именно pdo dblib, то есть pdo_mssql. Почему ? Потому что уже есть готовый проект, использующий doctrine, работающий на pdo_mysql. Все идеально ( и на win тоже ). Но надо обязательно перейти на mssql. Pdo odbc коннектит отлично, только с доктрине ведет себя не так, как надо. Я надеялся, что такого гемора у меня точно не будет, когда придется менять на mssql, но увы ..
 

varan

Б̈́̈̽ͮͣ̈Л̩̲̮̻̤̹͓ДͦЖ̯̙̭̥̑͆А͇̠̱͓͇̾ͨД͙͈̰̳͈͛ͅ
[offtop]Если это экранизировать, будет блокбастер![/offtop]
 

Adelf

Administrator
Команда форума
помнится были проблемы... но не с PDO :)
Я с нативным php_mssql.dll не мог(потом смог, установив нормальный Native Client)
А PDO сразу запахал..
 

Farsh

~ on ~ high ~ wave ~
О да, я это сделал ;))
Оно работает!
Скажу сразу - на windows 7 это дело не тестируйте, оно там не работает.
В общем расписываю свои шаги, может кому поможет:

1) злой, но упорный, я поставил windows server 2003 sp2 на ноут
2) не стал мелочиться и поставил microsoft sql server 2008 Express ( вместо 2005 )
3) при установки выделили права на текущего юзера и на группу администраторов, а также выбрали, что аутенфикация у нас идет "mixed", указав при этом пароль админа с именем "sa"
4) после установки заходим в sql server menegment studio и включаем TCP/IP, при этом во вкладке с IP адресами находим 127.0.0.1 и выбираем Active -> yes
5) качаем последний php ( 5.2.12 или 5.3.1 ), thread safe / VC6 / zip
6) самое главное: качаем sp4 обновление для microsoft sql server 2000, откуда из папки system берем ntwdblib.dll ( это самая последняя версия, в 5.2.12, кстати, она уже входит ) и msvcr71.dll, кидаем в корень php
7) узнаем порт mssql сервера: берем его PID ( в сервисах есть ), находим порт по этому пиду через netstat -ano
8) радуемся жизни

Пример DSN:

PHP:
try {
	$dbh = new PDO ("mssql:host=ZOHAN\SQLEXPRESS,1094;dbname=dbname", "sa", "указанный_при_установке_пароль");
} catch (PDOException $e) {
	echo "error: " . $e->getMessage() . "\n";
	exit;
}

var_dump($dbh);

$dbh = null;
Ну, и напоследок - в рот мне ноги , чего только я не перепробовал.

P.s. насколько я понял, freetds какую-либо роль на pdo_mssql не играет
P.p.s. не тестил связку windows server 2003 + ms sql 2005, но скорей всего работать не будет
P.p.p.s. есть драйвер для php/mssql от самого микрософта, по слухам, они в скором времени сделают также драйвер для PDO
 

zerkms

TDD infected
Команда форума
freetds бывает под винду?!??! зачем?!?!
а вообще - под линуксами на pdo_mssql он вполне себе влияет
 

Farsh

~ on ~ high ~ wave ~
zerkms
бывает ;)) Просто его с исходников под винду компилируют.
Зачем? Для фикса багов модуля php_mssql.dll
Вот тут самый полноценный туториал на эту тему.
Под линуксом влияет на pdo_dblib - это понятно ;)
 

akd

dive now, work later
Команда форума
немного апдейта после вечера со свеже установленой windows 7.
цель была: заставить заработать связку apache + php + mysql + mssql 2008
по порядку установил:
- apache 2.2.14
- mysql 5.1.43
- mssql 2008 express
- php 5.2.12 (здесь выбрать нужные extensions, в данном случае обязательно MSSQL)

после этих шагов работает все, кроме extenstion=mssql.dll, как только это появляется в пхп.ини, сразу падение.
далее руками выясняется, что httpd.exe не находит известный всем msvcr71.dll.

руками берем его у свежепоставленого mssql express 2008 в C:\Program Files\Microsoft SQL Server\80\Tools\Binn\ (если ставили по дефолту) и копируем к пхп, в моем случае e:\www\php5212\msvcr71.dll

после этого все начинает работать.

пс. у меня местами была ругань на ntwdblib.dll - не стоит обращать внимания, ноги растут из msvcr71.dll
 

Gakusei

Guest
ЛЮДИ, УМОЛЯЮ! нид хелп!!! Виртулка ВиндусХР
описываю шаги:
установил apache 2.2 в c:\apache2.2
установил php 5.2.12 в c:\php
установил mysql-5.1.28 (для сравнения с мс скл) в c:\mysql
MS SQL Server 2008 R2 Standart по дефолту
открыл httpd.conf, добавил PHPIniDir "c:/php/" и LoadModule php5_module c:/php/php5apache2_2.dll
открыл php.ini - исправил extension_dir = "c:\php\ext\"; снял коменты с extension=php_mssql.dll и extension=php_mysql.dll
скопировал libmysql.dll и ntwdblib.dll в Виндус\систем32
скопировал msvcr71.dll из C:\Program Files\Microsoft SQL Server\80\Tools\Binn\ в папку c:\php и в Виндус\систем32.
Результат phpinfo():
МУСКЛ есть, МС СКЛ нету! Я уже неделю с ним мучаюсь! Спасите!!!
Напоследок напишу про ntwdblib.dll:
версия продукта 8.00.2039
версия файла 2000.080.2039.00
И лог Апача
[Wed Apr 20 18:03:10 2011] [notice] Parent: Received restart signal -- Restarting the server.
[Wed Apr 20 18:03:10 2011] [notice] Child 1732: Exit event signaled. Child process is ending.
httpd.exe: Could not reliably determine the server's fully qualified domain name, using 192.168.131.65 for ServerName
PHP Warning: PHP Startup: Unable to load dynamic library 'c:\\php\\ext\\php_mssql.dll' - \xcd\xe5 \xed\xe0\xe9\xe4\xe5\xed \xf3\xea\xe0\xe7\xe0\xed\xed\xfb\xe9 \xec\xee\xe4\xf3\xeb\xfc.\r\n in Unknown on line 0
[Wed Apr 20 18:03:10 2011] [notice] Apache/2.2.16 (Win32) PHP/5.2.14 configured -- resuming normal operations
[Wed Apr 20 18:03:10 2011] [notice] Server built: Jul 30 2010 16:15:37
[Wed Apr 20 18:03:10 2011] [notice] Parent: Created child process 3896
httpd.exe: Could not reliably determine the server's fully qualified domain name, using 192.168.131.65 for ServerName
httpd.exe: Could not reliably determine the server's fully qualified domain name, using 192.168.131.65 for ServerName
PHP Warning: PHP Startup: Unable to load dynamic library 'c:\\php\\ext\\php_mssql.dll' - \xcd\xe5 \xed\xe0\xe9\xe4\xe5\xed \xf3\xea\xe0\xe7\xe0\xed\xed\xfb\xe9 \xec\xee\xe4\xf3\xeb\xfc.\r\n in Unknown on line 0
[Wed Apr 20 18:03:10 2011] [notice] Child 3896: Child process is running
[Wed Apr 20 18:03:11 2011] [notice] Child 1732: Released the start mutex
[Wed Apr 20 18:03:11 2011] [notice] Child 3896: Acquired the start mutex.
[Wed Apr 20 18:03:11 2011] [notice] Child 3896: Starting 64 worker threads.
[Wed Apr 20 18:03:12 2011] [notice] Child 1732: All worker threads have exited.
[Wed Apr 20 18:03:12 2011] [notice] Child 1732: Child process is exiting
[Wed Apr 20 18:03:12 2011] [notice] Child 3896: Starting thread to listen on port 80.

ПОЖАЛУЙСТА ПОМОГИТЕ!
 
Сверху