Ankündigung

Einklappen
Keine Ankündigung bisher.

verschachteltes SQLSRV_FETCH_ARRAY oder mehrfache QUERYs funktionieren nicht

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • verschachteltes SQLSRV_FETCH_ARRAY oder mehrfache QUERYs funktionieren nicht

    Hallo zusammen,

    ich habe ein kleines Problem, was ich nicht lösen kann.
    Ich möchte innerhalb einer SQLSRV_FETCH_ARRAY-While-Schleife eine weitere einbetten. bzw. auch ein SQLSRV_GET_FIELD.
    Dies funktioniert aber nicht. Ich erhalte an dieser Stelle immer ein Fehlermeldung: "Ungültige Ressource.."
    Dies ist ja aber essentiell, wenn ich zb. eine ID in einer anderen Tabelle als "Name" auflösen möchte.
    Mit den alten Befehlen hat das reibungslos funktioniert. (MSSQL_FETCH_ARRAY).

    Und ja, ich verwende natürlich eine andere Ressource. Bevor jemand fragt. ;o)

    In diesem Zusammenhang sei erwähnt, dass es bei mir nur Möglich ist die Ergebnisse einer SQLSRV_QUERY nacheinander auszuführen und anzuzeigen.
    Also:
    AUSFÜHRUNG
    ANZEIGEN
    EINE ANDERE AUSFÜHREN
    ANZEIGEN

    Mit den alten Befehlen ging:
    AUSFÜHREN
    EINE ANDERE

    ANZEIGEN
    ANZEIGEN


    Mein Code:

    PHP-Code:
                            function viewDB($sql)
                            {
                            include 
    'config.inc';
                            
    $connectionInfo=array( "Database"=>"SafetyMgnt""UID"=>"xxxxx""PWD"=>"xxxxx" );

                            global 
    $conn;
                            
    $conn=sqlsrv_connect($cfg["host"], $connectionInfo);
                            if( 
    $conn === false )
                            {
                            die( 
    print_rsqlsrv_errors(), true));
                            }

                            return 
    sqlsrv_query($conn,$sql);
                            }

                            
    $sql="SELECT Name FROM Users";
                            
    $sql_bild="SELECT Bild FROM Bilder";

                            
    $res viewDB($sql);

                            while(
    $row sqlsrv_fetch_array($res))
                            {
                            echo 
    $row["Name"];
                            
    $res_bild=viewDB($sql_bild);

                            while(
    $row_bild sqlsrv_fetch_array($res_bild))
                            {
                            echo 
    $row_bild["bild"];
                            }

                            
    //oder auch: bei fix einem DS:
                            
    echo SQLSRV_GET_FIELD($res_bild,0);
                            } 
    Beides mit Fehler:
    "sqlsrv_close(): supplied resource is not a valid ss_sqlsrv_conn resource in /var/www/html/sims/viewentries.php on line 276"
    nach erstem DS.

    Offenbar kann der Provider immer nur eine Ressource oder Connection aufbauen. Was keinen Sinn macht, da die Action ja im Grunde mit der Übergabe in die Variable "$RES" abgeschlossen ist.

    Vielleicht kennt ja einer von euch das Problem, und hat eine Lösung.
    Ich probier hier schon Tage lang rum....

    Vielen Dank und Beste Grüße,
    TLow


  • #2
    https://www.php-resource.de/forum/sq...tch-array.html

    Kommentar


    • #3
      Verstehen tue ich eigentlich nur Bahnhof aber es klingt so als würdest du versuchen einen einfachen Datenbank JOIN mit PHP nachzuprogramieren...
      Pre-Coffee-Posts sind mit Vorsicht zu geniessen!

      Kommentar


      • #4
        Bitte keine Crosspostings in mehreren Foren ohne Hinweis darauf. Ich verweise auch auf die Forenregeln in diesem Zusammenhang.

        Kommentar


        • #5
          Zitat von Thallius Beitrag anzeigen
          Verstehen tue ich eigentlich nur Bahnhof aber es klingt so als würdest du versuchen einen einfachen Datenbank JOIN mit PHP nachzuprogramieren...
          joa, einen CROSS JOIN in diesem Falle. Glaub nicht, daß das wirklich das Ziel ist ...
          PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

          Kommentar


          • #6
            Du musst das Ergebnius der Abfrage erst komplett abrufen und freigeben. Das kann die Schnittstelle auch intern. Das sind ist z,.B. die Option "SQLSRV_CURSOR_CLIENT_BUFFERED" https://docs.microsoft.com/de-de/sql...-sqlsrv-driver SQLSRV_CURSOR_CLIENT_BUFFERED

            Kommentar


            • #7
              Guten Morgen,

              @erc
              vielen Dank für den Tipp.
              Ich hatte es schon mit "SQLSRV_CURSOR_KEYSET" versucht. Damit konnten ein paar andere Merkwürdigkeiten gelöst werden.
              Das "SQLSRV_CURSOR_CLIENT_BUFFERED" bewirkt aber leider überhaupt nichts.


              Also dann:
              PHP-Code:
              <?php
              function viewDB($sql)
              {
                  include 
              'config.inc';
                  
              $connectionInfo=array( "Database"=>"SafetyMgnt""UID"=>"user""PWD"=>"password" );

                  global 
              $conn;
                  
              $params = array();
                  
              $options =  array( "Scrollable" => SQLSRV_CURSOR_CLIENT_BUFFERED );
                  
              $conn=sqlsrv_connect($cfg["host"], $connectionInfo);
                  if( 
              $conn === false )
                  {
                      die( 
              print_rsqlsrv_errors(), true));
                  }

                  return 
              sqlsrv_query($conn,$sql$params$options);

              }


              so long,

              Kommentar


              • #8
                Warum verwendest du nicht einfach PDO?

                Und "global" ist böse und sollte nicht im Code vorkommen.

                Kommentar


                • #9
                  hellbringer
                  ohne "global" geht gar nix mehr.

                  Kommentar


                  • #10
                    Zitat von TLow Beitrag anzeigen
                    hellbringer
                    ohne "global" geht gar nix mehr.
                    Soll das jetzt eine Ausrede sein es absichtlich falsch zu machen?

                    Kommentar


                    • #11
                      Ein include in einer Funktion sollte auch vermieden werden. $conn kannst du in den Funktionsparametern mit übergeben.

                      Kommentar


                      • #12
                        OK.
                        Ich hab's jetzt ohne den "Umweg" über die "alte Function" gemacht.
                        Funktioniert reibungslos. Bisher.

                        also der Teil reicht ja dann auch nur einmalig:
                        PHP-Code:
                        $connectionInfo=array( "Database"=>"database""UID"=>"user""PWD"=>"password" ); $params = array();
                        $options =  array( );
                        $conn=sqlsrv_connect("host"$connectionInfo);
                        if( 
                        $conn === false )
                        {
                               die( 
                        print_rsqlsrv_errors(), true));

                        und dann eben:
                        PHP-Code:
                        $res=sqlsrv_query($conn"SELECT......" $param$options); 
                        so viele mal wie ich will.
                        Muss man nicht verstehen, ist halt so!

                        Kommentar


                        • #13
                          Eigentlich sollte man beim Programmieren schon verstehen, was man tut. Und das nicht als Magie sehen, bei der man irgendwelche Voodoo-Rituale macht und mit Glück kommt dann der Regen.

                          Kommentar

                          Lädt...
                          X