Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Problem mit mysqli_stmt::get_result

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Problem mit mysqli_stmt::get_result

    Hallo,
    ich habe daheim ein wenig programmiert und wollte dann mein Script auf einen Webserver, wofür es eigentlich war, schieben. Als ich es getestet habe kam der Fehler:
    Fatal error: Call to undefined method mysqli_stmt::get_result() in ***/test/handler/menu.php on line 36

    Hier der Code dafür:
    PHP-Code:
    $mysqli= new mysqli
                
    (
                    
    config::$sql_host,
                    
    config::$sql_user,
                    
    config::$sql_pw,
                    
    config::$sql_db
                
    );
            
    $query  " SELECT * FROM ".config::$sql_table_rechte." WHERE Name=?";
            
    $stmt   $mysqli -> prepare ($query);
            
    $stmt   -> bind_param('s'$rechte);
            
    $stmt   -> execute();
            
    $result $stmt -> get_result();
            
    $rows $result -> fetch_assoc(); 
    Ich habe hier schon herausgefunden woran es liegen könnte. Wahrscheinlich an dem fehlenden "Mysqlnd" Meine Frage ist... Kann ich prepared Statements trotzdem irgendwie verwenden? Da Befehle wie bind_param() oder prepare() funktionieren denke ich ja schon. Nur wie? Bin ich nofalls gezwungen die PHP Version zu erhöhen?

    Hier einige Serverdaten:

    PHP Version 5.3.10-1
    ubuntu3.14


    mysqli

    MysqlI Support enabled
    Client API library version 5.5.31
    Client API header version 5.5.38
    MYSQLI_SOCKET /var/run/mysqld/mysqld.sock

    Ich hoffe auf Hilfe.

  • #2
    Die Funktion existiert wie du schon herausgefunden hast nicht in allen MySQL Treibern.
    Es gibt aber andere Möglichkeiten das Ergebnis zu erhalten, die überall funktionieren sollten.
    http://php.net/manual/en/mysqli.prepare.php
    [URL="http://php.net/manual/en/migration55.deprecated.php"]mysql ist veraltet[/URL] [URL="http://php-de.github.io/jumpto/mail-class/"]Mails senden: Ohne Probleme und ohne mail()[/URL]
    [PHP]echo 'PS: <b>Meine Antwort ist keine Lösung, sondern nur eine Hilfe zur Lösung.</b>';[/PHP]

    Kommentar


    • #3
      ok...
      Ich habe im Beispiel des Manuals, dessen Seite verlinkt war, die Methode bind_result() gefunden. Es ist schrecklich. Ich habe 26 Spalten in der Tabelle und muss jetzt deswegen 26 Variablen dafür definieren? Eine Alternative hab ich dazu aber nicht gefunden. fetch_assoc kriege ich damit ja nicht zum laufen und so hab ich improvisiert:
      PHP-Code:
              $mysqli= new mysqli
                  
      (
                      
      config::$sql_host,
                      
      config::$sql_user,
                      
      config::$sql_pw,
                      
      config::$sql_db
                  
      );
              
      $query  " SELECT * FROM ".config::$sql_table_rechte." WHERE Name=?";
              
      $stmt   $mysqli -> prepare ($query);
              
      $stmt   -> bind_param('s'$rechte);
              
      $stmt   -> execute();
              
      $result $stmt -> bind_result($col1$col2$col3$col4$col5$col6$col7$col8$col9$col10$col11$col12$col13$col14$col15$col16$col17$col18$col19$col20$col21$col22$col23$col24$col25$col26);
              
      $stmt-> fetch()
                  or die(
      $mysqli->error() );
              
      $rows=array($col1$col2$col3$col4$col5$col6$col7$col8$col9$col10$col11$col12$col13$col14$col15$col16$col17$col18$col19$col20$col21$col22$col23$col24$col25$col26);
              
      // $rows ist jetzt so wie ich es wollte, mal abgesehen von den keys des Arrays
              //echo "<pre>";
              //print_r ($rows);
              //echo "</pre>";
              
      $i=0;
              
      $query="SELECT * FROM ".config::$sql_table_menu." WHERE ";
              
              foreach( 
      $rows AS $spalte )
              {
                      
      // Abarbeitung
              

      Ich krieg jetzt auch noch diesen Fehler:
      Commands out of sync; you can't run this

      würde die Funktion get_result() funktionieren, wenn ich den Ubuntuserver nun mit PHP 5.5 oder so ausstatten würde? Ich hab zwar keine Ahnung wie man das macht aber das würde ich schon irgendwie hin kriegen. Das ist zumindest besser als dieses unsaubere Zeug hier zu verwenden.

      Kommentar


      • #4
        Mit PDO hat man diesen Stress nicht

        würde die Funktion get_result() funktionieren, wenn ich den Ubuntuserver nun mit PHP 5.5 oder so ausstatten würde? Ich hab zwar keine Ahnung wie man das macht aber das würde ich schon irgendwie hin kriegen. Das ist zumindest besser als dieses unsaubere Zeug hier zu verwenden.
        Meinem Verständnis nach, sollte es ja schon reichen das Paket mit dem Treiber zu installieren, wenn du über die benötigten Rechte verfügst sollte das damit funktionieren
        Code:
        apt-get install php5-mysqlnd
        + Eventuell in der Webserver / PHP-Konfiguration noch etwas umstellen...

        Empfehlungen:
        -> bisschen in Ubuntu einarbeiten / Server-Anbieter fragen / auf bessere Antworten warten
        [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
        [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

        Kommentar


        • #5
          hm... Ich hab auch schon überlegt ob ich auf PDO umsteige, aber hab bis jetzt noch nicht die Lust gehabt mich einzuarbeiten, gerade da ich erst seit vielleicht 3 Monaten mysqli verwende. Das wäre jetzt aber sowieso ein sehr großer Aufwand für mich, da ich schon dutzende Male pre-stmts verwendet habe und ich keine Lust hab die ganzen Dinge nochmal neu zu machen. Wer weiß, eventuell bringt der Umstieg auf die neue Version von PHP mir noch weitere Vorteile für das Projekt.
          Um mal auf den Server zurückzukommen...
          Es ist nicht direkt mein Server. Ich hab nur FTP-Zugang und arbeite da für eine Firma in der Familie dran. Ich werde dann einfach mal sagen, dass der oben genannte Befehl mal probiert werden sollte. Leider hat von uns keiner Ahnung von Ubuntu, höchstens von Suse. Ich selbst hab noch nie mit Linux gearbeitet. Eventuell kann der Provider da ja auch noch helfen.
          Es wird wieder eine Meldung von mir geben, wenn es Neuigkeiten gibt bis dahin danke für die Hilfe bis jetzt.

          Ich wünsche euch frohe Weihnachten!

          Edit:
          Mir hat der PDO keine Ruhe gelassen und so hab ich mich über die letzten Tage damit beschäftigt und es damit lösen können! Vielen lieben Dank für eure Hilfe. Es wird zwar wahrscheinlich ein riesiger Aufwand werden alles auf PDO umzustellen, aber das schaffe ich schon. Es wäre natürlich immernoch wünschenswert, wenn jemand, der zu viel Zeit übrig hat, mal ein Tutorial verlinken würde, wie man einen Ubuntuserver mit ner neuen PHP version ausstatten könnte. Wenn nicht ist das auch kein Problem, nur vielleicht hat da ja jemand schnell was zur Hand.

          Kommentar

          Lädt...
          X