php(nix)&mssql&&freetds&pdo trbls

danilabergin

Новичок
php(nix)&mssql&&freetds&pdo trbls

Ребят. Пытаюсь работать с mssql с никсовой машины, на которой php&apache.

Вот так собирал php (предварительно, конечно, собрал freetds)
./configure --prefix=/usr/local/php5 --with-apxs2=/usr/local/apache2/bin/apxs --with-mssql=/usr/local/freetds --with-pdo-dblib=/usr/local/freetds

вот что получил итого(phpinfo):

PDO support enabled
PDO drivers sqlite2, sqlite, dblib

pdo_dblib
PDO Driver for FreeTDS/Sybase DB-lib enabled
Flavour freetds

пытаюсь:

PHP:
try {
   $dbh = new PDO('mssql:host=dbsrv;dbname=bd1', 'sa', '');

} catch (PDOException $e) {
   print "Error!: " . $e->getMessage() . "<br/>";
   die();
}
Получаю экспешн: Error!: could not find driver.

Где грабли...?

-~{}~ 15.11.06 11:01:

Меняю dsn на:
PHP:
$dbh = new PDO('dblib:host=dbsrv;dbname=bd1', 'sa', '');
Получаю: "Error!: SQLSTATE[HY000] Server is unavailable or does not exist. (severity 9)". Хотя он прекрасно avaliable и exist соответсвенно...
 

danilabergin

Новичок
Гм. Ну ман я уже изучил... что там такого полезного, что может помочь моему случаю?
 

danilabergin

Новичок
Вы видимо, не поняли до конца мою проблему... :)

Я проблему решил...

Не верно.
$dbh = new PDO('dblib:host=dbsrv;dbname=bd1', 'sa', '');
Верно.
$dbh = new PDO('dblib:host=dbsrv:1433;dbname=bd1', 'sa', '');
 

hermit_refined

Отшельник
А это уже потому, что вы в обход freetds.conf действуете - не как белый человек.
 

danilabergin

Новичок
Пытаюсь, стать белым :)
Раскоменчиваю:

[MyServer2k]
host = dbsrv
port = 1433
tds version = 8.0

Но как теперь в php подцепить этот [MyServer2k] ?
 

Alexandre

PHPПенсионер
1) установи freetds
2) посторайся законектится из консоли freetds
3) коннекся из пхп с темже коннектом, что из freetds.
Код:
$this->db_mssql_connect = mssql_connect ( 'sqlhost:1433', 'test' , '123');
4) теперь можно прикручивать и PDO

З.Ы. у меня на конект два дня ушло и еще полдня на коннект из под PDO.
 

danilabergin

Новичок
Ну freetds и так, установлен.
Цитирую сам себя...
Вот так собирал php (предварительно, конечно, собрал freetds)
./configure --prefix=/usr/local/php5 --with-apxs2=/usr/local/apache2/bin/apxs --with-mssql=/usr/local/freetds --with-pdo-dblib=/usr/local/freetds
Сейчас буду пробовать коннектиться с консоли.
 

Alexandre

PHPПенсионер
Ну freetds и так, установлен.
danilaberginне собрано с поддержкой freetds, а установить саму библиотеку freetds ( freetds-0.62.4б freetds-msdblib-0.62.4).
из консоли коннектся - получается? пока не законектишься из консоли, не ломай пхп...
 

danilabergin

Новичок
Конкретно вот так:
PHP:
mssql_connect ('dbsrv:1433', 'sa' , '');
mssql_select_db ('bd1');
Все ок.

Мы, похоже, суть вопроса потеряли...

Речь уже пошла, скорей о тюнинге, или, даже корректности настроенного freetds и использования pdo.
PHP:
$dbh = new PDO('dblib:host=dbsrv:1433;dbname=bd1', 'sa', '');
Так, тоже все работает.

Но как заметил hermit_refined. Это не корректный подход...

-~{}~ 15.11.06 13:32:

Так, тоже, все проходи на ура.
/usr/local/freetds/bin/tsql -S mssql -H dbsrv -p 1433 -U sa
 

Alexandre

PHPПенсионер
конфиг freetds.conf
# A typical Microsoft SQL Server 2000 configuration
;[MyServer2k]
; host = ntmachine.domain.com
; port = 1433
; tds version = 8.0
Код:
    $host = 'dblib:host=sqlhost:1433; dbname=moscow';
    $login='test';
    $psw = '123';

  $c = new c($host, $login, $psw);
  $this->db = new PDO ($host, $login, $psw );
-----------------------------------------------
 function __construct($host, $login, $psw) {
    $logfile = LOG_DIR.$logfile;
        try {
                $this->db = new PDO ($host, $login, $psw );
        } catch (PDOException $e) {
           print "Error!: " . $e->getMessage() . "<br/>\n";
           die();
        }
 } // end __construct
 

danilabergin

Новичок
Получается, мы тут последнее время занимаемся флеймом.
hermit_refined навел излишний страх.

Спасибо, всем принявшим участие.
 
Сверху