[ISSUE] Verbindung über sqlsrv_connect()

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • [ISSUE] Verbindung über sqlsrv_connect()

      Ich grüße euch,
      ich wollte euch einmal befragen, ob einer Kenntnisse über die neue
      sqlsrv_connect()-Funktion und dessen Verbindungsparameter hat.

      (Wobei es mir über die Abstraktionsschnittstelle PDO lieber wäre.)
      => new PDO( "sqlsrv:Server=Computername\SQLEXPRESS ; Database = ... ", "Benutzername", "Passwort");

      Die Treiber sind beide vorhanden:
      php_pdo_sqlsrv_53_ts_vc9.dll
      php_sqlsrv_53_ts_vc9.dll

      Nun ist das Problem, dass sqlsrv_connect(), keine IP-Adresse erwartet,
      ich jedoch auf einen externen MSSQL-Server zugreifen möchte.

      Prozedurale Verbindung:

      Quellcode

      1. $connect = array( "UID"=>"Benutzer", "PWD"=>"passwort" );
      2. $link = sqlsrv_connect ( "Computername\SQLEXPRESS", $connect );
      3. if(!$link)
      4. {
      5. echo 'Verbindung fehlgeschlagen.';
      6. }


      Dies hier ist die genutzte Quelle für den prozeduralen Verbindungsaufbau. Nirgendwo wird eine IP-Adresse, bzw. die URL abgefragt.

      Hat hier einer bereits Erfahrung und kennt eine Lösung dazu?
      Vielleicht habe ich auch nur etwas Offensichtliches übersehen.


      [COLOR="#8b0000"]Übrigens:[/COLOR]
      Dies hier ist der der Fehler-Code, der auftritt:

      PHP-Quellcode

      1. Array
      2. (
      3. [0] => Array
      4. (
      5. [0] => 08001
      6. [SQLSTATE] => 08001
      7. [1] => -1
      8. [code] => -1
      9. [2] => [Microsoft][SQL Server Native Client 10.0]
      10. SQL Server Network Interfaces:
      11. Error Locating Server/Instance Specified [xFFFFFFFF].
      12. [message] => [Microsoft][SQL Server Native Client 10.0]
      13. SQL Server Network Interfaces: Error Locating Server/Instance Specified [xFFFFFFFF].
      14. )
      15. [1] => Array
      16. (
      17. [0] => HYT00
      18. [SQLSTATE] => HYT00
      19. [1] => 0
      20. [code] => 0
      21. [2] => [Microsoft][SQL Server Native Client 10.0]Login timeout expired
      22. [message] => [Microsoft][SQL Server Native Client 10.0]Login timeout expired
      23. )
      24. [2] => Array
      25. (
      26. [0] => 08001
      27. [SQLSTATE] => 08001
      28. [1] => -1
      29. [code] => -1
      30. [2] => [Microsoft][SQL Server Native Client 10.0]A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online.
      31. [message] => [Microsoft][SQL Server Native Client 10.0]A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online.
      32. )
      33. )
      Alles anzeigen


      Vielen Dank im Voraus.
      Virtual
    • Werbung zur Unterstützung des Forums ( Bitte AddBlocker deaktivieren )

    • Schade, dass bisher so wenig Resonanz gekommen ist.
      Es scheint aber auch ein Verzwicktes Problem.

      Nun bin ich einen Schritt weitergekommen und stehe vor einem "neuen"
      Problem:

      Mir ist zu Ohren gekommen, dass Apache mit PHP laufen sollte, welche vorzugsweise mit VC6 kompiliert wurde.
      Ironischerweise ist die letzte in VC6 kompilierte Version PHP 5.2.16.
      Was auch den Grund hat, warum Apache selbst VC9 in Nutzung hat,
      jedoch die neuen MSSQL-Features nicht unterstützt.

      Wo liegt hier der Sinn?
      Der alte MSSQL-Treiber (php_mssql.dll) ist nicht mehr vorhanden
      und der neue scheint aufgrund der Kompilierung zu streiken.

      Kennt hierzu jemand eine Lösung (Ich würde nur ungern wieder zurückgreifen auf die veraltete mssql_connect()-Methode).
      Immerhin möchte ich es mir nicht so einfach machen, wie unsere Repräsentaten im Flyff-Viertel ;).

      [COLOR="#8b0000"]EDIT:[/COLOR]
      Ich sehe gerade, dass keine 24 Stunden vergangen sind
      und ich entschuldige mich für dieses Vergehen, des "Pushes".
      Jedoch ist mir dieses Anliegen wichtig und wollte meine Ergebnisse nunmal mit einem neuen Post hervorheben.

      Vielen Dank
      // Virtual
    • Nein, es ist nicht komplizierter, eher nur Ansichtssache, ob es einem gefällt.
      Es liegt nur daran, dass es für 5.3.8 noch kein VC6 Release gibt.
      Das ist das einzige Problem.
      Und umschreiben muss man dafür ebenfalls nichts?
      Bezüglich des Server-Feldes: Es bleibt wie gewohnt bei Computername/SQLEXPRESS ;).

      Da das Switchen über die PDO dann läuft wird es sogar deutlich einfacher,
      weil du nur ein Abfrage-Schema anwenden musst,
      um auf mehrere Datenbank zugreifen zu können :).

      Alles wäre funktionstüchtig, wäre hier nicht die Kompilierung im Spiel.

      // Virtual
    • Hast du dich schonmal eingehend damit beschäftigt ?
      Ich habe das Gefühl du erzählst sachen die du irgendwo
      aufschnappst aber die zu 80% Käse sind.

      Schau dir mal die Libary Funktionen an und WIE sie arbeiten ...

      Natürlich gibst du IP/SQLInstanz an...
      Wenn du keine IP angibst, nutzt er by default localhost.
      Habe doch selbst auf einem Kunden Webspace
      einen zugang zu einem externen MSSQL Server via PHP 5.3x
    • Ja klar hast du den Zugang,
      doch redest du von MSSQL_CONNECT(), richtig?
      Wir reden aneinander vorbei,
      daher bitte lese mein Anliegen nochmal genauer:

      Eine Nutzung von mssql_connect() möchte ich nunmal vermeiden.
      Sonst würde ich diesen Aufwand nicht betreiben.^^
      Nur mit dem IP/SQLInstanz könntest du Recht haben, was ich anfangs auch dachte.

      Es wird mehrfach darauf hingewiesen, dass mssql_connect() durch sqlsrv_connect() ersetzt werden kann.
      Zudem ist MSSQL auch nur bedingt mit PDO kompatibel, deshalb möchte ich direkt auf sqlsrv_connect setzen.


      Bitte lese es selber nach : PHP: Einführung - Manual
      Versuche dich nicht immer direkt so energisch aufzuführen.
      Ich versuche lediglich mit Hilfe der Neuerungen eine Verbindung aufzubauen.

      [COLOR="#8b0000"]EDIT:[/COLOR] Danke, du hast mich auf die Idee gebracht auf ODBC umzusteigen,
      damit ich wenigstens mit meiner Arbeit fortfahren kann, bis es einen VC6 Release gibt.

      // Virtual
    • Ich rede die ganze Zeit von sqlsrv_connect() ...
      Was für Neuerungen ? Das ist was komplett anderes, PHP
      bietet keine Microsoft extensions mehr an (Weil es Streitigkeiten gab) und
      so hat Windows seine eigene DLL Releast die du jetzt benutzt.

      Der Aufbau, die geschwindigkeit, das ständige trennen/verbinden der Con beim wechseln der Datenbank usw ...


      Und nochmal NEIN ich rede von sqlsrv_connect()
    • Es scheint mittlerweile ein ganz anderes Problem zu sein,
      da ich selbst mit Microsoft Management Studio nicht in der Lage bin zuzugreifen,
      unabhängig welche Verbindungsdaten ich wähle.
      Mir kommt es eher in den Sinn, dass es an eventuell fehlenden Rechten liegt,
      da ich zweit Benutzer auf diesem Server bin und kein "sa".
      Vorort ( auf dem Root selber) bin ich in der Lage zu verbinden.


      Dein Wissen könntest du auch einsetzen, um das hießige Problem nun zu lösen.
      Darüber zu debattieren, wieso nun mssql_connect() abgeschafft wurde,
      bringt mich selber leider nicht weiter.


      Ich habe nun eine Verbindungsmöglichkeit außerhalb ohne sqlsrv_connect() und kann
      dennoch auf PDO zurückgreifen. Das Problem liegt an der Verbinungsmöglichkeit an sich.
      Siehe erster Absatz.

      Vielen Dank
      // Virtual
    • Wie verbindet denn der "sa" der den MSSQL Server auch noch benutzt.
      Grundlegend kann ich dir sagen, dass du einige Konfigurationen vornehmen
      musst, um den Server von aussen erreichbar zu machen ( nicht nur den Port freigeben ).

      Sollte es zutreffen, dass die anderen Benutzer mit ihren Anwendungen innerhalb des netzwerkes
      oder vom localhost verbinden, könnte es sein, das die Freigabe nach außen noch nicht vorgenommen wurde.

      Was sagt denn der Windows Action Log ? Ist LoginMode auf 2 gestellt ?
      (KEY_LOCAL_MACHINE\Software\Microsoft\Microsoft SQL Server\Instance Name\MSSQLServer\LoginMode)

      Ports 1433 & 1434 sind Offen ?

      Kannst du von deinem PC eine ODBC verbindung zum Server herstellen ?
    • Unter Microsoft SQL Server gibt es keinen LoginMode.
      Jedoch ein Ordner mit meinem Benutzernamen.

      Ich ahne schon etwas, da dieser Benutzer dort weder Lese- noch Schreibrechte hat. ( Rechtsklick auf diesen Benutzer)
      Jedoch "Spezielle Rechte", welcher mir laut Fenster Vollzugriff erlauben.
      Siehe selbst:



      Aufgrund dessen, dass ich keine Rechte habe Ports freizugeben,
      werde ich nun einen internen MSSQL-Server anlegen.

      Thema hat sich somit erledigt.
      Trotzdem danke ich dir für deine Hilfe.

      [COLOR="#8b0000"]EDIT:[/COLOR]
      Was mir gerade eingefallen ist:
      Selbst, wenn es nun auf meinem Rechner zu Hause läuft
      und ich eine odbc-Verbindung aufbaue. Wie soll dies auf einem Webspace funktionieren,
      bei dem nicht der passende Treiber installiert werden kann?

      // Virtual
    • Nun, jetzt habe ich die Situation, die ich vermeiden wollte.
      Auf meinem lokalen Rechner den MSSQL-Server.
      Die Verbindung steht, was auch nicht wirklich das Problem gewesen ist.

      Dennoch bleibt die Frage,
      wie stellt man es am besten an, dassspäter hinaus auf einem Webspace,
      bei dem man eben keine Treiber installieren kann, eine MSSQL-Verbindung erhällt.

      Alle kostenlose Webspaces ( meines Wissens nach ) unterstützen zwar PHP und MySQL,
      doch im Großen und Ganzen kein MSSQL. Gibt es hierfür überhaupt Abhilfe?

      Ich hätte nunmal gerne Website vom Root getrennt, sollte der MSSQL-Server einmal nicht erreichbar sein.

      // Virtual
    • Nun, wie wir bereits das Thema hatten, möchte ich möglichst mssql_connect() nicht nutzen.
      Höchstens in der Not. ;)
      Zum einen wird es nicht mehr von PHP unterstützt
      und zum anderen kann ich mit sql_srv() "PreparedStatements" durchführen,
      was mit MSSQL nicht möglich gewesen wäre.
      ( Ausnahme wäre der Umweg über PDO ;) )

      Doch sicher bin ich mir nun nicht, bei welcher Verbindungsart ich bleibe.
      Ich bin glücklich, dass gestern meine Verbindung erfolgreich gewesen ist und ich
      komplett die Daten auslesen konnte.

      Eventuell, je nach Angebot der Webspace-Anbieter,
      steige ich auf die meist genutzte Verbindungsart für MSSQL-Server ( derzeit noch mssql_connect()? ) um.

      // Virtual
    • "Umweg" ist hier lediglich ein unpassender Ausdruck gewesen.

      Ich habe aktuell eine Website mit Standartfunktionen,
      welche regulär auf eine MySQL-Datenbank zugreift.
      Auch habe ich nun eine zusätzliche Verbindung
      ( aufgrund der letzten Begebenheiten,
      dass MSSQL direkt nicht mehr unterstützt wird/werden wird ) über sql_srv().

      Egal, wie es derzeit ist, möchte ich den einfachsten Weg finden zu MSSQL zu verbinden
      und das mit möglichst wenig Aufwand.
      ( zu dem meist keine Konfigurationen an PHP selbst vorgenommen werden können/dürfen. )

      Hättest du hier einen Vorschlag diesbezüglich?

      // Virtual
    • Hmm, es ist für mich nicht ganz einleuchtend.
      Dieses Verbindung richtet sich lediglich an MSSQL-Server Verbindungen, sobald es kein Windows-Betriebsystem ist,
      in diesem Fall "Debian".

      Auch hier muss ein Treiber installiert und angegeben werden.
      Dennoch erscheint mir die Website als hilfreich.

      // Virtual
    • Ich denke das ist das was du möchtest. Eine Trennung von dem Windows Root und der Homepage. Und wie erreicht man das besser als mit einem Linux Root?

      Wenn das nicht das ist was du suchst, dann musst du mir noch einmal genau erklären was du eigentlich machen willst, denn dann ist dein Post etwas unverständlich :D

      Gruß
      Ulle