PDO-Verbindung mit MSSQL, Erweiterung benötigt unbedingt MSSQL-Server vorort?

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

  • PDO-Verbindung mit MSSQL, Erweiterung benötigt unbedingt MSSQL-Server vorort?

    Guten Tag zusammen,
    ich habe folgendes Problem:

    Aktuell läuft auf meinem Betriebsystem PHP 5.3.8, sowie ein MySQL-Server, der resultierend für eine Website gedacht ist.
    Nun möchte ich mit MSSQL objektorientiert arbeiten, wobei ich direkt die Abstraktionsklasse PDO einbinden möchte.
    Hierfür habe ich mich zuvor informiert, dass ich dieses Treiber-Paket: SQLSRV20.EXE,
    welche alle notwendigen Treiber enthällt. Darunter auch den Treiber php_pdo_sqlsrv_53_ts_vc9.dll.

    In die "...\php\ext\"-Ordner habe ich es ebenfalls eingebunden und aktiviert.
    Apache startet einwandfrei, jedoch zeigt er nun einen Fehler auf:

    Quellcode

    1. Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[IMSSP]: This extension requires either the Microsoft SQL Server 2008 Native Client (SP1 or later) or the Microsoft SQL Server 2008 R2 Native Client ODBC Driver to communicate with SQL Server.
    2. Neither of those ODBC Drivers are currently installed.
    3. Access the following URL to download the Microsoft SQL Server 2008 R2 Native Client ODBC driver for x86:
    4. http://go.microsoft.com/fwlink/?LinkId=163712'
    5. in C:\xampp\htdocs\...\inc\classes\class.PDO.php:16
    6. Stack trace: #0 C:\xampp\htdocs\...\inc\classes\class.PDO.php(16): PDO->__construct('sqlsrv:Server=M...', 'root', '')
    7. #1 C:\xampp\htdocs\...\common.php(14): System\Database\PDO->__construct('sqlsrv:Server=M...', 'root', '')
    8. #2 C:\xampp\htdocs\...\scripts\replacement.php(4): include('C:\xampp\htdocs...')
    9. #3 C:\xampp\htdocs\...\register.php(3): include('C:\xampp\htdocs...')
    10. #4 {main} thrown in C:\xampp\htdocs\...\inc\classes\class.PDO.php on line 16


    Auf deutsch: Ich solle den Microsoft SQL Server 2008 R2 herunterladen, jedoch möchte ich auf einen externen Microsoft-Server [via Remote-Zugriff] zugreifen und nicht auf einen Internen, da die Website und der Microsoft_Server unabhängig agieren sollen.

    Kennt jemand hierzu eine Lösung?
    Ist eine Installation eines MSSQL-Servers wirklich vorort notwendig?
    Ich meine, dass eine prozedurale Verbindung via MSSQL direkt funktioniert,
    jedoch es über eine objektorientierte Abfrage über PDo fehlschlägt.

    Zusätzliche Fragen:
    1. Kann mir hier auch einer Informationen über ODBC geben, wofür ODBC steht,
    ob es sinnvoll ist dies hier alternativ anzuwenden?
    2. Ich kenne leider immernoch nicht den Unterschied zwischen Thread-Safe und Non-Thread-Safe. Was ist für ein Produktiv-System später anzuwenden?

    Vielen Dank
    Sheldon
  • Ist ODBC nun, unabhänging davon, dass ich alles über PDo vereinheitlchen wollte, vorzuziehen?

    Gibt es temporär keine Lösungsmöglichkeit mich mit einem MSSQL-Server über PDO zu verknüpfen,
    ohne jenen Microsoft-Server auf dem gleichen System laufen zu lassen?

    Also nochmals kurz zusammengefasst:
    Ich habe auf einem System (Windows 7) mit XAMP installiert, welcher vorerst die Website darstellt.
    PDO-Treiber "extension=php_pdo_sqlsrv_53_ts_vc9.dll" ist aktiviert und PHP spuckt hier keinen Fehler aus.
    Jedoch erst bei Aufruf der Website erscheint der im ersten Beitrag gepostete Fehler: "Fatal Error:....".
    PHP, bzw. der Treiber möchte, dass ich "Microsoft SQL Server 2008 Native Client (SP1 or later)" installiere,
    jedoch war mein Wille, diese Software auf einem weiteren Server zu nutzen.

    Mit freundlichen Grüßen
    Sheldon
  • Also der MySQL-Server, der hier daheim läuft, ist einwandfrei, da ich bereits tagelang mit ihm gearbeitet habe.
    Den dortigen dortigen MSSQL-Server könnte ich zwar neuinstallieren, jedoch obliegt dies einem Bekannten, da ihm jener Root-Server gehöhrt.

    Könnte es eventuell daran liegen, dass nur die Verbindungsdaten an einer gewissen Stelle falsch angegeben sind, er somit nicht verbinden kann
    und folglich keine Verbindung zum dortigen Microsoft SQL Server 2008 Native Client herstellen kann.

    Sehr fraglich, was ich nun machen soll.

    Mit freundlichen Grüßen
    Sheldon
  • Der Microsoft SQL Server 2008 Native Client hat nichts mit dem eigentlichen SQLServer zu tun. Das sind, wie der Name schon sagt, Dinge für den Client.

    Auf deutsch: Ich solle den Microsoft SQL Server 2008 R2 herunterladen, jedoch möchte ich auf einen externen Microsoft-Server [via Remote-Zugriff] zugreifen und nicht auf einen Internen, da die Website und der Microsoft_Server unabhängig agieren sollen.

    Du sollst nicht den Server Runterladen, sondern nur den Native Client. Das ist schon richtig für ein Setup wie du es vor hast.

    Hierfür habe ich mich zuvor informiert, dass ich dieses Treiber-Paket: SQLSRV20.EXE,
    welche alle notwendigen Treiber enthällt. Darunter auch den Treiber php_pdo_sqlsrv_53_ts_vc9.dll.

    Dem ist eben nicht so, bei den Systemanforderungen für den Download steht doch auch:

    Microsoft SQL Server 2008 R2 Native Client (available in the SQL Server 2008 R2 Feature Pack.

    Also lad dir das Feature Pack runter, installier es und schon sollte das ganze funktionieren.
  • Vielen Dank Rondrer,
    könnte auch sein, dass ich den Wald vor lauter Bäumen nicht erkenne oder es versuche schwieriger zu gestalten als es ist.

    Ich werde nun wie vorgegeben den MSSQL Native Client installieren und sehen, was passiert.
    Werde das Ergebnis euch berichten.

    Mit freundlichen Grüßen
    Sheldon

    Ergebnis der Installation des Microsoft Native Clients:
    Ich habe den Client hier heruntergeladen:



    Hat hier jemand eine Idee, wie ich diesen Fehler ohne eine Deinstallation des Clients beseitigen kann?


    Neuerung:
    Ich habe den obigen Client deinstalliert und nun diesen hier -> Microsoft® SQL Server® 2008 R2 Native Client -> X64-Paket (sqlncli.msi) installiert.

    Jedoch wiederum exakt der gleiche Fehler, wie im obigen Bild.

    Mit freundlichen Grüßen
    Sheldon

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Sheldon ()

  • Alles schon geschehen.
    Ich war zuvor nur in der Annahme eine schnelle Auskunft zubekommen
    aufgrund dessen, dass du ein Wort in den Thread geworfen hast und noch online gewesen bist ;).

    Nun ist der Port wieder frei.
    Ich habe zwar nicht die Ports überprüfen lassen,
    doch habe ich nun einen Sockel-Resetter, welcher anscheinend sehr wirkunsvoll ist.^^


    Trotzdem bleibt das Problem, dass dieser neue Fehler:

    Quellcode

    1. Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[08001]:
    2. [Microsoft][SQL Server Native Client 10.0]SQL Server Network Interfaces: Connection string is not valid [87]. '
    3. in C:\xampp\htdocs\...\inc\classes\class.PDO.php:16 Stack trace:
    4. #0 C:\xampp\htdocs\...\inc\classes\class.PDO.php(16): PDO->__construct('sqlsrv:Server=M...', 'root', '')
    5. #1 C:\xampp\htdocs\...\common.php(14): System\Database\PDO->__construct('sqlsrv:Server=M...', 'root', '')
    6. #2 C:\xampp\htdocs\...\scripts\replacement.php(4): include('C:\xampp\htdocs...')
    7. #3 C:\xampp\htdocs\...\index.php(3): include('C:\xampp\htdocs...')
    8. #4 {main} thrown in C:\xampp\htdocs\...\inc\classes\class.PDO.php on line 16


    Danke für diesen Hinweis.
    Sheldon

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von Sheldon ()

  • Also es hat sich bei mir ein wenig getan. Ich möchte dieses mal egal wie eine Verbindung zum MSSQL-Server schaffen.
    Dafür versuche ich es prozedural mit der funtion: sqlsrv_connect(); und gebe die passenden Daten ein:

    Quellcode

    1. $connectionInfo = array( "UID"=>"sa", "PWD"=>"passwort" );
    2. $link = sqlsrv_connect ( "Computername\SQLEXPRESS", $connectionInfo );
    3. Zur Nutzung von sqlsrv_connect(): [url='http://de2.php.net/manual/en/function.sqlsrv-connect.php']http://de2.php.net/manual/en/function.sqlsrv-connect.php[/url]
    4. if(!$link)
    5. {
    6. echo 'Verbindung fehlgeschlagen.';
    7. echo '<pre>';
    8. die( print_r( sqlsrv_errors(), true));
    9. echo '</pre>';
    10. }
    11. else
    12. {
    13. echo 'Alles in Ordnung.';
    14. }
    Alles anzeigen


    Selbstverständlich habe ich auch den passenden Treiber dazu installiert.
    Dieser ist aktuell in Nutzung: php_sqlsrv_52_ts_vc9.dll.
    Auch wurde der Apache ohne Fehler neugestartet.

    Folgender Fehler erscheint

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


    Und ja, der SQL Server Native Client 10.0 ist installiert.
    Auch habe ich mir Informationen über die Named Pipes geholt und alle Einstellungen diesbezüglich sollten in Ordnung sein.
    Quelle: support.microsoft.com/kb/195566/de

    Was mir auffällt, ich habe keine idee, wie ich die IP des Servers noch unterbringen soll, da sqlsrv_connect nur die MSSQL-Server-Instanz, als auch Verbindungsdaten wissen möchte, jedoch keine IP annimmt. :/?

    Nun bin ich ratlos, wie könnte ich dieses Problem lösen?
    //Sheldon

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Sheldon ()

  • Also ich habe neue Gegebenheiten:
    Aktueller Stand ist, dass ich XAMPP 1.7.7 auf meinem Rechner zu Hause am laufen habe.
    Nun hat jedoch PHP die Version 5.3.8 im XAMPP-Paket, ist jedoch mit VC9 kompiliert worden,
    da es derzeit nur VC9 für die Version 5.3.8 gibt, jedoch VC6 für Apache vorgeschrieben ist.

    Ich hätte die Möglichkeit auf einen IIS-Server umzusteigen, auf PHP 5.3.8 VC6 Release zu warten,
    auf mssql_connect() down zugraden oder auf PHP 5.2.16 downzugraden, was folgert, dass
    ich beispielsweise meine Namespaces nicht mehr verwenden kann.

    Welche Variante schlagt ihr vor oder habt ihr andere, effektivere Lösungsmöglichkeiten,
    dennoch auf einen neuen Standart zu setzen?

    Da meine Absicht es ist, dieses System später an andere Personen weiter zugeben, kann ich
    weniger verlangen viel Umstände auf sich zu nehmen und viel Aufwand zu betreiben,
    jedesmal sämtliche Installationen oder Upgrades durchzuführen.

    Für den Anwender möchte ich es im nachhinein so einfach wie möglich gestalten.

    Mit freundlichen Grüßen
    Sheldon