Maciej Piechowski

Maciej Piechowski Programista apl.
internetowych (PHP,
MySQL, JS)

Temat: Brak możliwości połączenia z bazą MS SQL z poziomu PHP

Witam wszystkich :)

Jestem w trakcie tworzenia małego skryptu, który powinien wyświetlić wszystkie rekordy z bazy MS SQL 2008 Server (wydanie 2010 rok). Fragment skryptu umieszczam poniżej. Niby wszystko OK. Żadnych błędów w logach, ani na ekranie, jednak nie potrafi on się połączyć z bazą. Serwery WWW oraz baz danych są podłączone do tej samej podsieci. Bazy są uruchomione na serwerze MS Windows 2003 Server, http na Slackware Linux 13.1. Serwer http wygląda następująco:
- Apache HTTPD Server - 2.2.15 (Unix)
- PHP 5.2.17 (skompilowany z obsługą MS SQL)
- FreeTDS 0.82

Umieszczam fragment kodu:

<?php
$server = "BAZY1";
mssql_connect($server, 'login', 'pass') or die("Nie mozna polaczyc z serwerem");
mssql_select_db('baza_danych');
$sql = mssql_query('SELECT * FROM tabela');
echo "<table border=\"1\">";
while($tab = mssql_fetch_array($sql)) {
echo "<tr><td>$tab[0]</td><td>$tab[1]</td><td>$tab[2]</td><td>$tab[3]</td><td>$tab[4]</td></tr>";
}
echo "</table>";
mssql_close($link);
?>


Jeżeli chodzi o instancje MS SQL, chce połączyć się z główną (BAZY1/).
Próbowałem różnych sposobów wpisując bezpośredni adres IP i port.

Pozdrawiam serdecznie,
Maciej Piechowski

konto usunięte

Temat: Brak możliwości połączenia z bazą MS SQL z poziomu PHP

Może baza działa tylko lokalnie natomiast jest zablokowana do dostępu zewnętrznego.

Z drugiej strony w manualu od PHP masz

// Server in the this format: <computer>\<instance name> or
// <server>,<port> when using a non default port number
$server = 'KALLESPC\SQLEXPRESS';

// Connect to MSSQL
$link = mssql_connect($server, 'sa', 'phpfi');

if (!$link) {
die('Something went wrong while connecting to MSSQL');
}
?>



więc wydaje mi się, że podajesz nazwę instancji, ale nie nazwę komputera na którym stoi.

konto usunięte

Temat: Brak możliwości połączenia z bazą MS SQL z poziomu PHP

Dokładnie jak wyżej.
Spróbuj zainstalować SQL Management Studio na serwerze i przez niego połączyć się z bazą. Automatycznie powinno Ci wykryć serwer SQL i dzięki temu będziesz wiedział co wpisać w $server.

BTW: Dlaczego MS SQL i PHP ? :) Nie lepiej było postawić drugiego linucha i MySQL ?Sebastian O. edytował(a) ten post dnia 18.04.11 o godzinie 13:22
Maciej Piechowski

Maciej Piechowski Programista apl.
internetowych (PHP,
MySQL, JS)

Temat: Brak możliwości połączenia z bazą MS SQL z poziomu PHP

Na wybór bazy nie mam wpływu, ma być MS SQL i koniec.

Jeżeli chodzi o nazwy instancji to tak jak już wspominałem.
Z lokalnego hosta łączy.

bazy1 to rekord w DNSie - 192.168.0.80

Chce się połączyć z główną instancją, czyli nie podaje nazwy instancji. A może jednak trzeba coś podać ?

SQL Management Studio łączy jako 'BAZY1\'. PHP w ten sposób nie chce...Maciej Piechowski edytował(a) ten post dnia 18.04.11 o godzinie 13:30

Temat: Brak możliwości połączenia z bazą MS SQL z poziomu PHP

Przez jaki sterownik się łączysz?

Ja obsługuję MS SQL z Zend i nie ma z tym problemów.
Maciej Piechowski

Maciej Piechowski Programista apl.
internetowych (PHP,
MySQL, JS)

Temat: Brak możliwości połączenia z bazą MS SQL z poziomu PHP

Skompilowałem PHP z rozszeżeniem MS SQL.

Rozszeżenie wymagało FreeTDS. Wszystko jest zrobione jak w manualu php.net

konto usunięte

Temat: Brak możliwości połączenia z bazą MS SQL z poziomu PHP

Weź inny komp z windowsem, zainstaluj management studio, podepnij do sieci i połącz z bazą. Jeśli się połączysz to coś nie halo z PHP.
Pamiętaj aby poprawnie wpisać 'BAZY1\', bo jest różnica między '/' a '\'. Poza tym możesz spróbować po IP. Ewentualnie otwórz MS SQL Configuration Manager (w starcie w katalogu SQL Server) -> SQL Server Network Configuration -> Protocols for XXX ->Named Pipes i TCP/IP na enable.
Maciej Piechowski

Maciej Piechowski Programista apl.
internetowych (PHP,
MySQL, JS)

Temat: Brak możliwości połączenia z bazą MS SQL z poziomu PHP

Przykro mi, ale to nic nie pomogło. Prawdopodobnie jest coś z samym PHP. Jutro spóróbuje go przekompilować jeszcze raz, tym razem na wersji 5.3.x

Pozdrawiam :)

PS. Jak ktoś by miał jeszcze jakiś pomysł na rozwiązanie, chętnie wypróbuję.

konto usunięte

Temat: Brak możliwości połączenia z bazą MS SQL z poziomu PHP

Może nie do końca jestem w temacie, ale w komentarzach do manuala php dotyczącego mssql_connect znalazłem coś takiego:

"When you try to connect to SQL Server 2008 Express, you always have to name the instance you are trying to connect to, even if you installed SQL2008express as "Default" instance instead of named instance. If your instance is SQLExpress and server name is myServer, the server parameter must be: "myServer\SQLExpress". If you installed Default instance of Standard (not express) version of SQL2008 instead, you don't need to name the instance. To connect using TCP/IP, you need also to check server network configuration, enable TCP/IP (listen all: yes), then go to addresses tab and setup port 1433 in all addresses you want the server listen on (by default, port is blank and server don't listen). Libraries involved in TCP/IP are ntwdblib.dll and dbnetlib.dll. Have fun!"

konto usunięte

Temat: Brak możliwości połączenia z bazą MS SQL z poziomu PHP

jest takie magiczne coś jak dziennik zdarzeń w MSSQL jaki Windows to pierwsze miejsce do którego się zagląda jak nie można się zalogować

konto usunięte

Temat: Brak możliwości połączenia z bazą MS SQL z poziomu PHP

Maciej Piechowski:
Przykro mi, ale to nic nie pomogło. Prawdopodobnie jest coś z samym PHP. Jutro spóróbuje go przekompilować jeszcze raz, tym razem na wersji 5.3.x

Pozdrawiam :)

PS. Jak ktoś by miał jeszcze jakiś pomysł na rozwiązanie, chętnie wypróbuję.

primo czy MSSQL ma włączoną komunikację po TCP-IP?
jaki model autentykacji masz tam ustawiony?

co widać w dzienniku MSSQL-a jak próbujesz się zalogować?
Bartosz Ratajczyk

Bartosz Ratajczyk MS SQL Developer

Temat: Brak możliwości połączenia z bazą MS SQL z poziomu PHP

Jak wygląda wpis dla freetds?

Czy na firewallu (iptables?) masz odblokowany port 1433?

konto usunięte

Temat: Brak możliwości połączenia z bazą MS SQL z poziomu PHP

Maciej Piechowski:
Przykro mi, ale to nic nie pomogło. Prawdopodobnie jest coś z samym PHP. Jutro spóróbuje go przekompilować jeszcze raz, tym razem na wersji 5.3.x

Pozdrawiam :)

PS. Jak ktoś by miał jeszcze jakiś pomysł na rozwiązanie, chętnie wypróbuję.

Jak to nic nie pomogło ?
Jeżeli nie możesz połączyć się z innego kompa, to zostaw PHP w spokoju.

@up: napisałem jak włączyć tcp/ip wyżej. Z jego kodu wynika, że nie ma autentykacji po Windows.

tutaj może być problem z grupą roboczą. Nie jestem pewien na 100%, ale nie połączysz się z kompem po nazwie, jeżeli oba kompy nie są w tej samej grupie roboczej.Sebastian O. edytował(a) ten post dnia 19.04.11 o godzinie 09:04

konto usunięte

Temat: Brak możliwości połączenia z bazą MS SQL z poziomu PHP

Sebastian O.:
tutaj może być problem z grupą roboczą. Nie jestem pewien na 100%, ale nie połączysz się z kompem po nazwie, jeżeli oba kompy nie są w tej samej grupie roboczej.

login domenowy lub dla maszyny w postaci domena\login lub nazwa_komputera\login i hasło powinny wystarczyć

Temat: Brak możliwości połączenia z bazą MS SQL z poziomu PHP

Ja jakiś czas temu miałem do zrobienia łącznik między jakąś bazą a bazą MSSQL.

I niestety musiałem olać PHP bo mój hosting nie oferował możliwości łączenia się z bazą MSSQL a nawet lokalnie musiałbym kompilować z MSSQL więc miałem podwójną motywację aby olać PHP.

Użyłem do tego javy.
I z tego co pamiętam to trza ustawić port na sztywno 1433, wyłączyć firewall lub ustawić przekierowanie, i ważne jest ustawić użytkownika w moim przypadku było 'sa' bez hasła.
Maciej Piechowski

Maciej Piechowski Programista apl.
internetowych (PHP,
MySQL, JS)

Temat: Brak możliwości połączenia z bazą MS SQL z poziomu PHP

Właśnie chyba też zrezygnuje z PHP i napisze coś w Javie dla Tomcata.

Dzięki za pomoc :)

Pozdrawiam.

konto usunięte

Temat: Brak możliwości połączenia z bazą MS SQL z poziomu PHP

Maciej Piechowski:
Skompilowałem PHP z rozszeżeniem MS SQL.

Rozszeżenie wymagało FreeTDS. Wszystko jest zrobione jak w manualu php.net

Pierwsza rzecz, to sprawdź z której wersji FreTDS korzystasz.
Cytat z dokumentacji FreeTDS:
"Microsoft servers don't usually accept TDS 5.0 connections. Use one of versions 4.2, 7.0 or 8.0"

druga rzecz, skonfiguruj poprawie FreeTDS i
trzecia rzecz, próbuj się łączyć przez ODBC.
http://pl.php.net/manual/pl/ref.uodbc.php

Łączę się z serwerem MSSQL przy pomocy FreeTDS+ODBC i zapewniam cię, że można :)

Temat: Brak możliwości połączenia z bazą MS SQL z poziomu PHP

Czy użytkownik, którym się łączysz na pewno jest dopisany do tej bazy ?

konto usunięte

Temat: Brak możliwości połączenia z bazą MS SQL z poziomu PHP

A tak trochę podsumowując temat. Nie znalazłem możliwości podłączenia MS SQL Express przez PHP na Linuxie, być może ktoś ma jakiś pomysł. Na MS-Windows podobno działa, przy użyciu rozszerzenia sqlsrv.dll.
Może ktoś ma jakiś inny pomysł podłączenia się do bazy MS-SQL na Linuxie i przepisana danych do PostgreSQL, może jakiś gotowy skrypt który można podłączyć pod Cron-a.

Temat: Brak możliwości połączenia z bazą MS SQL z poziomu PHP

test instalacji FreeTDS:

tsql -H 192.168.0.100 -D nazwa_bazy -p 1433 -U user -P haslo
exec SP_TABLES
go

pdo:

$dsn="dblib:dbname=nazwa_bazy;host=192.168.0.100:1433;charset=UTF-8;appname=abcd";
$db = new PDO($dsn, "user", "haslo");
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
$err = $db->errorinfo();
if ($db->errorcode()<>"00000") { echo($err[2]); }

albo odbc:

odbc.ini:
[MSSQLServer]
Driver = TDS
Description = My uber pro db
Trace = No
Server = 192.168.0.100
Database = nazwa_bazy

php:
$conn_mssql = odbc_connect("MSSQLServer","user","haslo");
$result=odbc_exec($conn_mssql, "SP_TABLES");
while(odbc_fetch_row($result)) echo odbc_result($result,1);

możesz się jeszcze upewnić czy host docelowy aby na pewno pozwala ci się połączyć na port:
telnet 192.168.0.100 1433

Następna dyskusja:

[MySQL][PHP]Jak poprawnie u...




Wyślij zaproszenie do