Montag, 26. Juni 2006
PHP5, MSSQL - mssql_connect Unable to connect to server
Das Verbinden zu einem MSSql-Server ist nicht ganz so trivial, wie ich zunächst dachte. Eigentlich sollte alles so Problemlos wie mit MySQL gehen, mit dem Unterschied das der Funktionspräfix statt mysql_ mssql_ lautet...
PHP und MSSQL
PHP ist eine mächtige Scriptsprache mit einem großen Funktionsumfang. Unter anderem Unterstützt PHP auch das Arbeiten mit MSSQL-Servern. Als ich heute versucht habe mich mit einem MSSQL-Sever mit PHP zu verbinden, bekam ich, zu meiner Überraschung keine Verbindung zu Server.
Das System, auf das PHP-Script läuft, welches sich mit dem Datenbankserver verbindet, ist ein Windows 2000 SP 4 Computer und der Datenbankserver ein Windows 2003 Server mit MSSQL 2000.
Testscript
- <?php
- $server = 'MSSQLHost';
- $database = 'foo';
- mssql_select_db($database, $handle);
- $query = 'SELECT * FROM bar';
- $result = mssql_query($query, $handle);
- while($row = mssql_fetch_assoc($result)) {
- }
- mssql_close($handle);
- ?>
Verbinden zum MSSQL-Server nicht möglich
Der Test wurde mit einem: Warning: mssql_connect() [function.mssql-connect]: Unable to connect to server quittiert. Nachdem alle anderen Möglichkeiten, wie beispielsweise Netzwerkverbindungen, ausgetestet wurde und immer noch keine Verbindung möglich war, suchte ich im Internet nach einer Lösung. Leider sind es ziemlich viele Lösungsansätze, doch hatt sich das bei mir bewährt.
Lösung zum mssql_connect Problem
Als erstes Installiert man von der CD, mit der der MSSQL-Server installiert wurde, die Tools welche mitgeliefert werden, wie beispielsweise: Client Network Utility, Query Analyzer, Enterprise Manager usw.
Dann auf der CD nach der Datei ntwdblib.dll suchen und diese einmal in den System32 Ordner von Windows, sowie in das PHP Installationsverzeichnis kopieren. Wenn man gefragt wird, ob man überschreiben möchte, ist man an der richtigen Stelle
Jetzt sollte man wissen, ob die Authentifizierung (bei der Datenbank) über SQL oder über NT-Authentifizierung geschieht. Wenn es über NT-Authentifizierung läuft, muss man in der php.ini nach folgendem Eintrag suchen:
mssql.secure_connection und den Schalter auf On setzen.
Jetzt sollte es funktionieren.
BOBAH - #1 - 08.11.2006 09:00 - (Antwort)
Hi!
Das ist leider nicht alles, da dem Server gesagt werden muss, wer alles auf die DB zugreifen darf.
Es wäre sonst zu einfach. ![]()
Gruß
willi - #2 - 06.11.2007 13:05 - (Antwort)
ja bei mir geht es immer noch nicht, kommt immer noch die gleiche fehlermeldung.
willi - #4 - 06.11.2007 16:02 - (Antwort)
- ntwdblib.dll in die entsprechenden verzeichnisse.
- mssql.secure_connection und den Schalter auf On setzen
- mssql.secure_connection und den Schalter auf Off setzen
beide einstellungen kein erfolg. meine vermutung, das ich am mssql-server noch was machen muß, hab nur kein plan was.
jack - #5 - 16.03.2008 08:19 - (Antwort)
hi foo,
you just made my day!
endlich habe ich die mssql verbindung bekommen.
der hinweis mit mssql.secure_connection auf 'on' hat's ermöglicht.
vielen DANK!!
Fu - #6 - 13.06.2008 12:08 - (Antwort)
Was für ein sinnloser beitrag.
m$ sql .. erstmal dreck, da sie eh alles von der sybase geklaut haben, wie alles andere auch nciht auf deren eignen mist gewachsen sind...
nur das sie die treiberschnittstelle umgecodet haben, sodass man schlecht mit dem org sybase drauf zu greifen kann.
also viel spass ihr spinner..
Guest 1 - #7 - 25.06.2008 00:18 - (Antwort)
Vielen Dank.
Es war nicht als mssql tutorial gedacht, hat mir aber meine ersten befehle erklärt.
Flo - #8 - 28.08.2008 15:41 - (Antwort)
Ich hab alles gemacht was hier steht und auch alles was auf 1000 anderen seiten steht
mein system. das php file liegt direkt am server ich arbeite auf meinen Standrechner welcher mit dem SQL Managment Studio eine verbindung bekommt.
am Server läuft SQLExpress 2005 mit Browsing aktiviert trotz allem findet das php script welches unter xampp läuft den dummen mssql server nicht !!
was ich schon alles versucht habe:
-ntwdblib.dll ins php und ins sys32 verzeichniss
-tcp/ip und namepipes protocolle aktivieren
-da ich mich direkt als SA conecte werden rechte wohl kaum das problem sein^^
-hab alle möglichen schreibweißen probiert wie localhost/SQLExpress localhost:1433 localhost,1433 ..
-und alles mögliche was man per google zu diesem problem noch so findet ..
wenn mir jemand helfen kann einfach antworten oder mailen dsa wär sehr net^^ (email: markus.florian@gmx.net)
Mr. Foo - #8.1 - 29.08.2008 14:23 - (Antwort)
Ist der MsSQL-Server jetzt lokal, oder liegt er auf einem entfernten Rechner?
Hieu Le - #9 - 05.03.2009 11:45 - (Antwort)
Unter Windows benutzt man Name Pipe.
In diesem Fall ist "SQLExpress" einzutragen.
pluspunkt - #9.1 - 20.07.2009 15:55 - (Antwort)
schaut mal hier,
http://techrepublic.com.com/5208-6230-0.html?forumID=101&threadID=227248&messageID=2266046
bei mir lag es an den Name pipes!
gl hf...
CongoFX - #10 - 28.12.2010 14:20 - (Antwort)
Bezüglich "Lösung zum mssql_connect Problem", ich sehe dass das Thema zwar schon ein paar Jährchen alt ist, aber ich hatte heute Nacht mit einem Problem zu kämpfen dass die mssql Extension um's Verrecken nicht geladen werden konnte und nirgends eine Antwort erhalten.
Meine Konstellation, ein Windows 2008 Server (x86) mit MSSQL 2008 R2 Server und PHP über den Web Platform Installer installiert, es läuft als Fast CGI Modul.
Wer trotz korrekt konfigurierter php.ini nicht mit dem SQL Server verbinden kann, da die mssql Extension nicht geladen werden kann sollte mal folgendes ausprobieren:
Shell öffnen und "php -m" ausführen, wenn nun ein Dialog erscheint in dem steht dass die "MSVCR71.dll" fehlt dann diese hier http://www.dlldump.com/download-dll-files.php/dllfiles/M/MSVCR71.dll/download.html downloaden und in das Verzeichnis "C:\Windows\System32" kopieren.
Vorsicht, ich bin mir nicht sicher ob die x86 dll unter x64 läuft und habe daher eine x64 dll in diesem Post hinterlegt http://www.tutorials.de/php/253095-unable-connect-server-mssql_connect.html#post1919165. Diese unter dem x64 System in das "C:\Windows\SysWOW64" Verzeichnis kopieren.
Sichergehen dass die MSSQL Extension existiert, "php -m" sollte keine Fehlermeldungen mehr ausgeben, falls doch dann mal nachsehen ob die Module installiert sind "Start" -> "Systemsteuerung" -> "Programme und Funktionen" -> "PHP 5.x.x" -> "Ändern" (oben) -> PHP Setup Fenster "Weiter" -> "Ändern" -> "IIS Fast CGI" -> "Extensions" erweitern -> "MSSQL" auswählen -> "PDO" erweitern -> "Microsoft SQL Server" auswählen -> "weiter" -> "Ändern" und Installation abschließen.
