Archiv verlassen und diese Seite im Standarddesign anzeigen : Syntax für DB-Connection
Lavingstar 23-10-2008, 12:17 Hallo, habe zwei Fragen bezüglich der Verbindung zu einer MS-SQL Datenbank:
1.) Wie lautet die korrekte Syntax für den Host, wenn der DB-Server nicht gleich dem Web-Server ist? Angenommen der Host heisst slr0ap01 - habe dann in der config.inc stehen:
define('DBHOST','slr0ap01'); // Hostname
Was allerdings nicht funktioniert. Hab es auch schon mit Blackslashes versucht
define('DBHOST','\\slr0ap01'); // Hostname
Aber das funktioniert genau so wenig ... Hat da jemand einen Rat?
2.) Wie muss ich die connect.inc umschreiben, wenn diese bislang auf mySQL geschrieben war. Also konkret lautet sie derzeit:
<?php
@mysql_connect(DBHOST, DBUSER, DBPASS) OR die("Fehler: Keine Verbindung zur Datenbank möglich.");
mysql_select_db(DBBASE) OR die("Konnte Datenbank nicht benutzen. Fehlermeldung: ".mysql_error());
?>
Ein erster Versuch in Form einer naiven Änderung von allen "my" in "ms" hat nicht zum Erfolg geführt ... :-)
XGremliN 23-10-2008, 14:31 mysql_connect() verbindet zu MySQL.
mssql_connect() (http://de.php.net/manual/de/function.mssql-connect.php) zu MSSQL
Lavingstar 05-11-2008, 10:01 Ok, das mit dem Verbindung von msSQL anstatt mySQL scheint dann geklärt, jedoch bleibt immer noch die Frage:
Wie lautet die korrekte Syntax für den Hostname, um eine Verbindung herzustellen?
Derzeit (funktioniert nicht):
define('DBHOST','slr0ap01'); // Hostname)
Alternativ (funktioniert auch nicht):
define('DBHOST','19.100.20.105'); // Hostname)
ghostgambler 05-11-2008, 11:35 Lies doch die Kommentare im PHP-Manual hinter dem Link der hier schon gepostet wurde.
Lavingstar 05-11-2008, 11:55 Original geschrieben von ghostgambler
Lies doch die Kommentare im PHP-Manual hinter dem Link der hier schon gepostet wurde.
Hab ich jetzt mal gemacht, war ja einiges. Vor allem ne tolle Zeitverschwendung. :rolleyes:
Oder hattest du da etwas rausgelesen was mir evtl. helfen könnte? Wenn ja wäre ich wirklich dankbar für einen (eindeutigen) Hinweis.
Ohne Dir jetzt etwas Böses zu wollen. Aber wenn Du Deinen DB-Host nicht kennst, frag Deinen Provider. Der wird Dir hier sicherlich Auskunft geben können. Denn mal ehrlich, woher soll hier jemand wissen, wie Dein DB-Host lautet?
Deine connect.inc.php müsstest Du eben nur auf die MS SQL Funktionen hin anpassen. Denn mit MySQL Funktionen wirst Du bezüglich MS SQL kein Erfolg haben. ;)
Und mach mal das @ weg.
Lavingstar 05-11-2008, 12:12 Es gibt keinen "Hoster" :-)
Es handelt sich hierbei um ein Firmennetzwerk und mir sind alle Daten die notwendig sind bekannt.
Ich suche nicht den "Namen" des Hosts - sondern den richtigen Syntax
Beispiel: Heisst es richtig
define('DBHOST','slr0ap01');
oder
define('DBHOST','\\slr0ap01');
oder
define('DBHOST','19.199.20.100');
oder
define('DBHOST','http://19.199.20.100');
oder oder oder ... btw: Die oben stehenden Versionen hab ich einfach schon ausprobiert, funktionieren aber alle leider nicht ... Darum meine Frage: Wie lautet der richtige Syntax?
MelloPie 05-11-2008, 12:42 die richtige syntax wäre
mssql_connect ('19.199.20.100', $Benutzername ,$Passwort );
Allerdings kann bei mssql auch ne menge in der konfiguration zu beheben sein. ZB tcp/ip aktivieren, etc.
Die wichstigste Frage ist: Ist der Zugriff über Netzwerk erlaubt? Oder lässt sich das DBMS nur über localhost verbinden? Diese Frage musst du erstmal klären, danach kannst du mit NetBiOS-Name den Server ansprechen; es ist besser als über die IP. Außerdem, wenn es sich um MS-SQL Server handelt, dann musst du auch noch prüfen, wieviele Instanzen des MS-SQL-Server auf dem Rechner laufen, und wenn mehrere sind, dann den SQL-Server mit dem richtigen Instanzname ansprechen und nicht den Windowservernamen.
Lavingstar 05-11-2008, 14:03 Original geschrieben von asp2php
Außerdem, wenn es sich um MS-SQL Server handelt, dann musst du auch noch prüfen, wieviele Instanzen des MS-SQL-Server auf dem Rechner laufen, und wenn mehrere sind, dann den SQL-Server mit dem richtigen Instanzname ansprechen und nicht den Windowservernamen.
Oha ...sehr interessant... Also auf dem SQL Server laufen mehrere DBs die für unterschiedliche Benutzer Zugriffsrechte erlauben. Inwieweit das jetzt in "Instanzen" unterteilt ist weiss ich leider gar nicht, da ich davon (noch) keine Ahnung habe ... da muss ich mal versuchen mich schlau zu machen ... danke für den Hinweis!
@MellowPie: Danke für die Antwort, jetzt habe ich das wenigstens schonmal inner Reihe :)
SQL-Server Instanz != DB
Eine Instanz des SQL-Servers bedeutet ein komplettes Datenbanksystem. Eine Instanz kann mehrere DBs verwalten (IMHO bis zu 32 tausend). IMHO, auf einem Rechner kann bis zu 50 Instanzen installiert werden (im Clusterbetrieb 25)
Du kannst den Dienst-Snap-In aufrufen und prüfen, wieviele Instanzen von MS-SQL läuft.
Lavingstar 07-11-2008, 13:55 Es läuft nur 1 Instanz auf dem Server. Anpingen klappt super.
Vielleicht ist einfach nur mein Connection-Script schrott :-(
Gibt es ein Standard Connection-Script, was ich einfach mal ausprobieren kann obs generell funktioniert zu der DB zu connecten?
mssql_connect() (http://de.php.net/manual/en/function.mssql-connect.php) geht so. Was sagt mssql_get_last_message()?
Lavingstar 07-11-2008, 14:54 Original geschrieben von asp2php
Was sagt mssql_get_last_message()?
mssql_get_last_message(); sagt leider gar nichts :-(
Egal in welcher Form ich es irgendwo einfüge liefert es keinen Wert zurück ... :-/
Lavingstar 07-11-2008, 15:06 Original geschrieben von asp2php
mssql_connect() (http://de.php.net/manual/en/function.mssql-connect.php) geht so. Was sagt mssql_get_last_message()?
Ah doch, habe noch die Klammern vergessen, jetzt zeigt er an:
Warning: mssql_connect() [function.mssql-connect]: Unable to connect to server: slr0ap01
ghostgambler 07-11-2008, 15:08 Original geschrieben von Lavingstar
Vielleicht ist einfach nur mein Connection-Script schrott :-(
Gibt es ein Standard Connection-Script, was ich einfach mal ausprobieren kann obs generell funktioniert zu der DB zu connecten?
Telnet, immer noch ^^,
http://forum.fachinformatiker.de/297553-post4.html
Irgendwas hast du beim Testen wohl falsch gemacht, er sollte definitiv nicht auf Port 23 testen. Das hier hilft vllt.:
http://www.google.com/search?client=safari&rls=de-de&q=telnet+port&ie=UTF-8&oe=UTF-8
Lavingstar 07-11-2008, 15:41 hi Gambler :-)
Also folgendes:
bei netstat -a zeigt er mir ne Liste von PCs samt Ports (TCP/UDP) im Werk an, allerdings ist der gesuchte Rechnername nicht dabei und der Port 1433 erscheint auch nirgendwo.
Wenn ich telnet slr0ap01 eingebe, sucht er automatisch auf Port 23 und bringt Fehlermeldung zurück.
Wenn ich telnet slr0ap01 1433 eingebe geht ein neues, leeres, schwarzes CMD auf in dem ich gar nichts machen kann. :dontknow:
So ... nun steht ich hier, ich armer Tor - und bin so klug als wie zuvor :D
ghostgambler 07-11-2008, 15:58 Original geschrieben von Lavingstar
Wenn ich telnet slr0ap01 1433 eingebe geht ein neues, leeres, schwarzes CMD auf in dem ich gar nichts machen kann. :dontknow:
Kannst du in dem Fenster etwas eintippen?
Lavingstar 07-11-2008, 16:00 Eintippen ja, aber man sieht nicht was eingetippt wird und es tut sich auch nichts, ausser wenn man "exit" eintippt^^
Es wird also auch kein C:\ angezeigt
onemorenerd 07-11-2008, 16:03 Wenn du Telnet den Port mitgeben mußtest, dann kann das bei mssql_connect() auch nicht schaden. ;)
Lavingstar 07-11-2008, 16:08 Habs versucht mit
slr0ap01,1433
slr0ap01:1433
19.187.23.153,1433 und
19.187.23.153:1433
als Hostname ... leider kein Erfolg :-(
onemorenerd 07-11-2008, 16:15 Und es blieb bei der oben geposteten Fehlermeldung? Das kann ja wohl kaum sein. Wenn du dich per telnet verbinden kannst, sollte das auch PHP schaffen und die Fehlermeldung wäre dann eher sowas wie "access denied".
Lavingstar 07-11-2008, 16:21 Ja es kommt immer noch die Fehlermeldung:
Warning: mssql_connect() [function.mssql-connect]: Unable to connect to server: slr0ap01 in C:\xampp\htdocs\test\inc\connect.inc.php on line 7
Fehler: Keine Verbindung zur Datenbank möglich.
Meine Codes sehen so aus:
connect.inc.php
<?php
mssql_connect(DBHOST, DBUSER, DBPASS) OR die("Fehler: Keine Verbindung zur Datenbank möglich.");
mssql_select_db(DBBASE) OR die("Konnte Datenbank nicht benutzen. Fehlermeldung: ".mssql_error());
?>
config.inc.php
<?php
define('DBHOST','slr0ap01'); // Hostname
define('DBUSER','***'); // Benutzername
define('DBPASS','***'); // Passwort
define('DBBASE','CAR-Datenbank'); // Datenbankname
?>
Hinweis: Bei DBUSER und DBPASS hab ich natürlich nicht *** da stehen sondern die richtigen Daten.
ghostgambler 07-11-2008, 16:46 Lesen und ausprobieren: http://de2.php.net/manual/de/ref.mssql.php#81594
ggf. halt das hier mal
http://www.microsoft.com/Sqlserver/2005/en/us/php-driver.aspx (Link aus dem Kommentar hier: http://de2.php.net/manual/de/ref.mssql.php#80534)
und den Rest auch mal lesen, vielleicht ist noch etwas brauchbares dabei...
Hast du den MS-SQL Server auch für Netzwerkzugriffe freigeschaltet? Welche Version hast du? 2000 oder 2005 oder ... ?
Auf
ping slr0ap01
antwortet der Rechner korrekt?
btw.: ändere define('DBBASE','CAR-Datenbank'); in define('DBBASE','[CAR-Datenbank]');
Lavingstar 12-11-2008, 09:52 Original geschrieben von asp2php
Hast du den MS-SQL Server auch für Netzwerkzugriffe freigeschaltet? Welche Version hast du? 2000 oder 2005 oder ... ?
Ich habe Version 2005
Auf ping slr0ap01 antwortet der Rechner korrekt?
Ja, darauf antwortet er einwandfrei.
btw.: ändere define('DBBASE','CAR-Datenbank'); in define('DBBASE','[CAR-Datenbank]');
Gemacht, jedoch ohne Erfolg. Der Fehler ist derzeit ja auch:
Warning: mssql_connect() [function.mssql-connect]: Unable to connect to server: slr0ap01 in C:\xampp\htdocs\test\inc\connect.inc.php on line 7
Fehler: Keine Verbindung zur Datenbank möglich.
Sprich: Die Zeile 7:
define('DBHOST','slr0ap01');
wird angemeckert ... :dontknow:
Original geschrieben von Lavingstar
Sprich: Die Zeile 7:
define('DBHOST','slr0ap01');
wird angemeckert ... :dontknow:
Dann ist der Fehler weiter oben (vor den define-Zeilen) zufinden. Was hast du davor noch gemacht?
Lavingstar 12-11-2008, 10:06 Original geschrieben von asp2php
Was hast du davor noch gemacht?
Also der komplette Code der config.inc.php sieht so aus:
<?php
/* path: inc/config.inc.php
last modified: 05.11.2008
author: ***
*/
define('BASE','http://19.187.50.201/test/'); // Webadresse
define('HOME','http://19.187.50.201/test/index.php'); // Home-URL
define('RPLY','xyz@abc.com'); // Antwort-Adresse
define('DBHOST','slr0ap01'); // Hostname (IP: 19.187.23.153)
define('DBUSER','CARUser'); // Benutzername
define('DBPASS','carsls'); // Passwort
define('DBBASE','CAR-Datenbank'); // Datenbankname
if (!isset($username)) $username = "";
if (!isset($passwort)) $passwort = "";
if (!isset($pw_pruef)) $pw_pruef = "";
if (!isset($nname)) $nname = "";
if (!isset($vname)) $vname = "";
if (!isset($email)) $email = "";
?>
MelloPie 12-11-2008, 10:39 wie bereits angesprochen: ist deine mssql über netzwerk erreichbar, heisst ist in der db tcp/ip als connect erlaubt, etc.
es ist wohl eher ein konfigurationsproblem von mssql
Lavingstar 12-11-2008, 10:53 Original geschrieben von MelloPie
wie bereits angesprochen: ist deine mssql über netzwerk erreichbar, heisst ist in der db tcp/ip als connect erlaubt, etc.
es ist wohl eher ein konfigurationsproblem von mssql
Ja ist sie, per Ping über IP und auch über Hostname.
Das ist ein Firmen-SQL-Server auf dem auch andere SQL-Datenbanken liegen und funktionieren, allerdings werden diese nicht über PHP angesprochen und benutzt, sondern per ASP, ansonsten hätte ich da mal bei config-Dateien spicken können ...
[b]Habe gerade gesehen dass ich die config.inc.php eben gepostet hab, das sollte natürlich die connect.inc.php sein, die wie folgt aussieht:
<?php
/* path: inc/connect.inc.php
last modified: 12.09.2008
author: ***
*/
mssql_connect(DBHOST, DBUSER, DBPASS) OR die("Fehler: Keine Verbindung zur Datenbank möglich.");
mssql_select_db(DBBASE) OR die("Konnte Datenbank nicht benutzen. Fehlermeldung: ".mssql_error());
?>
Bitte nicht durcheinander Infos posten ... mich interessiert's, warum bei define eine Fehlermeldung rausgeworfen ist.
Was mit ASP geht, muss noch lange nich mit PHP gehen. Hast du wirklich überprüft, ob:
- MS-SQL für Netzwerkzugriff freigeben wurde?
- dein User/PW auch für diesen Zweck zulässig ist?
Am besten installierst du den Management Studio lokal auf deinem Rechner und stelle anschliessend mit den gegebenen Daten eine Verbindung im Management Studio zum DB-Server her. Wenn das klappt, dann schauen wir deine PHP-Seite mal an, wenn nicht dann müssen wir MSSQL erstmal netzwerkfähig umstellen.
ghostgambler 12-11-2008, 11:23 Original geschrieben von asp2php
Bitte nicht durcheinander Infos posten ... mich interessiert's, warum bei define eine Fehlermeldung rausgeworfen ist.
Er hat die falsche Datei gepostet, siehe sein letzter Post.
Lavingstar 12-11-2008, 12:13 Ja Entschuldigung, ich habe mich wie schon geschrieben vertan, nochmal zur besseren Übersicht:
- Die Zeile 7 die angemeckert wurde ist ja aus der connect.inc.php und ist definitiv folgende:
mssql_connect(DBHOST, DBUSER, DBPASS) OR die("Fehler: Keine Verbindung zur Datenbank möglich.");
Original geschrieben von asp2php
Hast du wirklich überprüft, ob:
- MS-SQL für Netzwerkzugriff freigeben wurde?
- dein User/PW auch für diesen Zweck zulässig ist?
Diese Sachen kann ich nur bei der IT-Abteilung meines Unternehmens erfragen und die haben mir zugesichert das alles "frei" ist, sowohl Ports, als auch Zugriffsrechte etc.
Ich selbst kann nur einen Test mittels Ping machen, der auch erfolgreich verlief.
Am besten installierst du den Management Studio lokal auf deinem Rechner und stelle anschliessend mit den gegebenen Daten eine Verbindung im Management Studio zum DB-Server her. Wenn das klappt, dann schauen wir deine PHP-Seite mal an, wenn nicht dann müssen wir MSSQL erstmal netzwerkfähig umstellen.
Habe die Anwendung "SQL Server Management Studio Express" bei mir lokal auf dem Rechner und kann damit zu der gewünschten Datenbank connecten, an der ich auch rumfummeln kann hinsichtlich Tabellen, Werte für Felder etc.
Installiere mal den Native Client auf dem Server wo PHP läuft http://msdn.microsoft.com/en-us/data/aa937733.aspx ... ich glaube, php hat Probleme, die API anzusprechen.
hast du schon die Hilfen auf http://de2.php.net/manual/de/function.mssql-connect.php durchgetestet?
Die ersten beiden KOmmentare scheinen doch ganz gut zu sein!?
Lavingstar 12-11-2008, 14:09 Original geschrieben von krel
Installiere mal den Native Client auf dem Server wo PHP läuft http://msdn.microsoft.com/en-us/data/aa937733.aspx ... ich glaube, php hat Probleme, die API anzusprechen.
Original geschrieben von krel
hast du schon die Hilfen auf http://de2.php.net/manual/de/function.mssql-connect.php durchgetestet?
Die ersten beiden KOmmentare scheinen doch ganz gut zu sein!?
Vielen Dank nochmals für die Hinweise, das mit dem "Native Client" / API hab ich wohl überlesen in den Comments, obwohl ich sie schonmal durchgeguckt habe ... ich werde mir jetzt diesen Native Client mal ziehen und installieren und noch die weiteren Comments genauer anschauen ... try and error - dann werde ich mich mit neuen oder alten Fehlermeldungen wieder melden :cool:
Lavingstar 13-11-2008, 10:05 Habe nun den "Native Client" installiert, was allerdings keine Besserung gebracht hat. Auch habe ich eine tolle Anleitung (http://www.php-resource.de/forum/showthread/t-56935.html) gefunden, aber auch das hat nichts gebracht ... schade - werde aber weitersuchen ...
Lavingstar 13-11-2008, 10:19 Habe jetzt mal eine phpinfo hochgeladen und ausgeführt und unter dem Punkt "mssql" folgende Infos erhalten, vielleicht erkennt da jemand ein Problem?:
mssql
MSSQL Support enabled
Active Persistent Links 0
Active Links 0
Library version 7.0
Directive Local Value Master Value
mssql.allow_persistent On On
mssql.batchsize 0 0
mssql.compatability_mode Off Off
mssql.connect_timeout 5 5
mssql.datetimeconvert On On
mssql.max_links Unlimited Unlimited
mssql.max_persistent Unlimited Unlimited
mssql.max_procs Unlimited Unlimited
mssql.min_error_severity 10 10
mssql.min_message_severity 10 10
mssql.secure_connection Off Off
mssql.textlimit Server default Server default
mssql.textsize Server default Server default
mssql.timeout 60 60
Welche Version ist den dein ntwdblib.dll im Moment?
Lavingstar 13-11-2008, 13:50 Original geschrieben von asp2php
Welche Version ist den dein ntwdblib.dll im Moment?
Diese Datei ist 3 x vorhanden, jeweils mit der Version2000.2.8.0 in
- Xampp/php
- Xampp/php/php4 und
- Xampp/apache/bin
Es soll aber 2000.80.194.0 sein!
Lavingstar 13-11-2008, 14:07 Original geschrieben von asp2php
Es soll aber 2000.80.194.0 sein!
:eek: oook ... wird runtergeladen und ersetzt ...! Danke für den Hinweis !
Lavingstar 13-11-2008, 15:50 Juhu! :-) Mit Auswechselung der Datei in die von dir beschriebene Version, ist der Fehler weg !! :huep:
ABER: Dafür kommt jetzt ne neue Fehlermeldung, allerdings findet er schonmal den SQL-Server und die Datenbank ... der Fehler lautet wie folgt:
Warning: mssql_query() [function.mssql-query]: message: Die SELECT-Berechtigung wurde für das 'eintraege'-Objekt, 'CAR-Datenbank'-Datenbank, 'dbo'-Schema verweigert. (severity 14) in C:\xampp\htdocs\test\eintraege.php on line 162
Warning: mssql_query() [function.mssql-query]: Query failed in C:\xampp\htdocs\test\eintraege.php on line 162
Fatal error: Call to undefined function mssql_error() in C:\xampp\htdocs\test\eintraege.php on line 162
Zeilen 159-162 sehen wie folgt aus:
$sort = "order by lfd_nr DESC";
$sql = "SELECT distinct lfd_nr FROM eintraege $where";
$res = mssql_query($sql) or die ("Konnte keine Beitraege abrufen. Fehlermeldung: ".mssql_error());
$num = mssql_num_rows($res);
So wie ich den Fehler da lese, kann der Befehl SELECT nicht auf die Datenbank zugreifen? Oder nur nicht auf die Tabelle?
MelloPie 13-11-2008, 15:55 btw. es gibt keine php funktion mssql_error()
Lavingstar 13-11-2008, 16:09 Original geschrieben von MelloPie
btw. es gibt keine php funktion mssql_error()
:D ok ...der Fehler schonmal behoben, in dem ich mssql_error() durch mssql_get_last_message() ersetzt habe, bleibt immer noch übrig:
Warning: mssql_query() [function.mssql-query]: message: Die SELECT-Berechtigung wurde für das 'eintraege'-Objekt, 'CAR-Datenbank'-Datenbank, 'dbo'-Schema verweigert. (severity 14) in C:\xampp\htdocs\test\eintraege.php on line 162
Warning: mssql_query() [function.mssql-query]: Query failed in C:\xampp\htdocs\test\eintraege.php on line 162
Konnte keine Beitraege abrufen. Fehlermeldung: Die SELECT-Berechtigung wurde für das 'eintraege'-Objekt, 'CAR-Datenbank'-Datenbank, 'dbo'-Schema verweigert.
onemorenerd 13-11-2008, 16:14 Schuß ins Blaue: Dein DBUSER darf die Tabelle eintraege in der CAR-Datenbank nicht lesen, sprich keine Selects darauf ausführen. :dontknow:
Yep, der DB-User hat nicht genügend Recht.
Lavingstar 13-11-2008, 18:41 Ok, danke euch beiden ! Werde ich morgen gleich mal den DB-Admin drauf ansprechen...
Lavingstar 14-11-2008, 10:12 Jawoll ja - habe jetzt selbst die Möglichkeit diese Datenbank samt Tabellen und Usern zu administrieren :huep:
Berechtigungen erteilt - und ... es geht (natürlich) :-)
Vielen vielen Dank allen für Eure Hilfe! :rocks:
PS: Es sind zwar immer noch Fehlermeldungen vorhanden, aber sobald ich an diesen wieder nicht weiterkomme, werde ich dafür nen eigenen Thread aufmachen, sonst wirds etwas zuviel und zu unübersichtlich hier :cool:
|
-
- |