Ankündigung

Einklappen
Keine Ankündigung bisher.

Prepared statement funktioniert nicht

Einklappen

Neue Werbung 2019

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

  • Prepared statement funktioniert nicht

    Hallo

    Ich versuche einen Code mit verschiedenen SELECT-Abfragen (mysql) zu realisieren, dazu möchte ich prepared statements verwenden. Leider funktionieren nicht alle codes, obwohl ich gleich vorgegangen bin. Könnt ihr mir helfen?

    folgender Code funktioniert, die Variabeln ($thisdatetime, $imgname) können auch ausgelesen werden.
    PHP-Code:
        $query "SELECT name, datetime FROM images WHERE id =?";
        
    $stmt mysqli_stmt_init($verbindung);
        if (
    mysqli_stmt_prepare($stmt$query)) :
            if (!
    $stmt) :
                die(
    'mysqli error: '.mysqli_error($verbindung));
            endif;
            
            
    mysqli_stmt_bind_param($stmt"i"$id);
            
    mysqli_stmt_execute($stmt);
            
    mysqli_stmt_bind_result($stmt$imgname$thisdatetime);
            
    mysqli_stmt_fetch($stmt);
        endif; 
    folgender code funktioniert nicht. $backid sei nicht definiert (Undefined variable: backid)
    PHP-Code:
            $backquery "SELECT id FROM images WHERE datetime < ? ORDER BY datetime DESC LIMIT 1";
            
    $backstmt mysqli_stmt_init($verbindung);
            if (
    mysqli_stmt_prepare($backstmt$backquery)) :
                if (!
    $backstmt) :
                    die(
    'mysqli error: '.mysqli_error($verbindung));
                endif;
                
                if (!
    mysqli_stmt_bind_param($backstmt"i"$thisdatetime)) :
                    die(
    'mysqli error: '.mysqli_error($verbindung));
                endif;
                if (!
    mysqli_stmt_execute($backstmt)) :
                    die(
    'mysqli error: '.mysqli_error($verbindung));
                endif;
                if (!
    mysqli_stmt_bind_result($backstmt$backid)) :
                    die(
    'mysqli error: '.mysqli_error($verbindung));
                endif;
                if (!
    mysqli_stmt_fetch($backstmt)) :
                    die(
    'mysqli error: '.mysqli_error($verbindung));
                endif;
            endif; 
    error codes sind eingeschaltet. Aber ausser der undefinierten Variable kommt keine Fehlermeldung. Womit hat er Probleme? $backid habe ich ja zu definieren versucht

    edit: Den Farben hier nach zu urteilen, scheint er mit dem >? in der query Mühe zu haben. Ist das falsch?

    [MOD] Ich war mal so frei/

  • #2
    Da mysqli_stmt_bind_result eine "normale" Funktion ist und kein Sprachkonstrukt wie beispielsweise isset() MUSS die Variable vorher zwangsläufig existieren, bevor diese als Referenz der Funktion übergeben werden kann.
    [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

    Kommentar


    • #3
      Glaube ich ehrlich gesagt nicht. Die Variable dürfte ja wohl als Referenz übergeben werden.
      [COLOR="#F5F5FF"]--[/COLOR]
      [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
      [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
      [COLOR="#F5F5FF"]
      --[/COLOR]

      Kommentar


      • #4
        Womit hat er Probleme? $backid habe ich ja zu definieren versucht
        Wo? Nicht in #1 oben.
        The string "()()" is not palindrom but the String "())(" is.

        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
        PHP.de Wissenssammlung | Kein Support per PN

        Kommentar


        • #5
          Zitat von tkausl Beitrag anzeigen
          Da mysqli_stmt_bind_result eine "normale" Funktion ist und kein Sprachkonstrukt wie beispielsweise isset() MUSS die Variable vorher zwangsläufig existieren, bevor diese als Referenz der Funktion übergeben werden kann.
          Danke schon mal für deinen Tipp. Aber meinst du wirklich so, wie ich das unten gemacht habe, dass ich backid mal irgendwie definiere und dann überschreibe?

          PHP-Code:
          $backquery = "SELECT id FROM images WHERE datetime <? ORDER BY datetime DESC LIMIT 1";
                  $backid = 0;
                  $backstmt = mysqli_stmt_init($verbindung);
                  if (mysqli_stmt_prepare($backstmt, $backquery)) :
                      if (!$backstmt) :
                          die('mysqli error: '.mysqli_error($verbindung));
                      endif;
                      
                      if (!mysqli_stmt_bind_param($backstmt, "i", $thisdatetime)) :
                          die('mysqli error: '.mysqli_error($verbindung));
                      endif;
                      if (!mysqli_stmt_execute($backstmt)) :
                          die('mysqli error: '.mysqli_error($verbindung));
                      endif;
                      if (!mysqli_stmt_bind_result($backstmt, $backid)) :
                          die('mysqli error: '.mysqli_error($verbindung));
                      endif;
                      if (!mysqli_stmt_fetch($backstmt)) :
                          die('mysqli error: '.mysqli_error($verbindung));
                      endif;
                  endif;
                  echo $backid;
          Als $backid wird leider die zuvor manuell definierte "0" ausgegeben... hattest du mich in eine andere Richtung zu lenken versucht?

          Kommentar


          • #6
            Zitat von hausl Beitrag anzeigen
            Wo?
            if (!mysqli_stmt_bind_result($backstmt, $backid)) :

            Da müsste doch der inhalt der in der query ausgewählten Zelle (aktuelle Zeile der Spalte ID) in die hier definierte Variable $backid geschrieben werden?

            Kommentar


            • #7
              Zitat von kammerjaeger Beitrag anzeigen
              Als $backid wird leider die zuvor manuell definierte "0" ausgegeben...
              Eigenartig, möglicherweise lag ich mit meiner Aussage oben falsch. Allerdings verwirrt mich der prozedurale Stil und auch die alternative Syntax, keine Ahnung wo da der Fehler liegt.
              [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

              Kommentar


              • #8
                Hilfreich wäre mal die Zeile der Notice. Ich würd ja mal denken, das Queryresult ist einfach leer.
                [COLOR="#F5F5FF"]--[/COLOR]
                [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                [COLOR="#F5F5FF"]
                --[/COLOR]

                Kommentar


                • #9
                  Zitat von nikosch Beitrag anzeigen
                  Hilfreich wäre mal die Zeile der Notice. Ich würd ja mal denken, das Queryresult ist einfach leer.
                  "Zeile der Notice" sagt mir nichts. Was beinhaltet diese, bzw. was genau soll ich hier hochladen?

                  Kommentar


                  • #10
                    Zitat von kammerjaeger Beitrag anzeigen
                    if (!mysqli_stmt_bind_result($backstmt, $backid)) :

                    Da müsste doch der inhalt der in der query ausgewählten Zelle (aktuelle Zeile der Spalte ID) in die hier definierte Variable $backid geschrieben werden?
                    Ok, habe dich da falsch verstanden, ich dachte du hast die Variable noch wo zusäzlich defniniert, was im Code noch fehlte also dieser nicht vollständig war.

                    ####

                    edit: Den Farben hier nach zu urteilen, scheint er mit dem >? in der query Mühe zu haben
                    statt:
                    PHP-Code:
                    datetime <? ORDER
                    das (Leerzeichen):
                    PHP-Code:
                    datetime < ? ORDER 
                    ####

                    $backid sei nicht definiert (Undefined variable: backid)
                    "Zeile der Notice" sagt mir nichts.
                    Warscheinlich du kommst in dieses if

                    PHP-Code:
                    if (mysqli_stmt_prepare($backstmt$backquery)) : 
                    gar nicht hinein und daher ergibt eine Abfrage auf die Variable danach auch undefined.

                    Wo bekommst du diese undefined-Meldung? An welcher Stelle?
                    error_reporting hast du voll aufgedreht?

                    PHP-Code:
                    error_reporting(-1);
                    ini_set('display_errors'1); 
                    The string "()()" is not palindrom but the String "())(" is.

                    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                    PHP.de Wissenssammlung | Kein Support per PN

                    Kommentar


                    • #11
                      Zitat von hausl Beitrag anzeigen
                      error_reporting hast du voll aufgedreht?

                      PHP-Code:
                      error_reporting(-1);
                      ini_set('display_errors'1); 
                      ja, error-reporting ist voll aufgedreht.


                      Warscheinlich du kommst in dieses if
                      if (mysqli_stmt_prepare($backstmt, $backquery)) :
                      gar nicht hinein
                      du hast Recht! Ich habe nun die manuelle Definition von backid = 0 in die oben erwähnte IF-Abfrage reingenommen, jetzt ist die Variable wieder undefiniert. Das If wird also tatsächlich übersprungen. Vielen Dank schon mal fürs Erste!

                      Kommentar


                      • #12
                        Scheint dann ein Fehler zu passieren http://php.net/manual/de/mysqli-stmt.prepare.php

                        Rückgabewerte
                        Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.
                        Fehler ausgeben lassen
                        The string "()()" is not palindrom but the String "())(" is.

                        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                        PHP.de Wissenssammlung | Kein Support per PN

                        Kommentar


                        • #13
                          Dann mal Fehlermeldungen von SQL abfragen.

                          PS: Hättest du gleich die komplette Fehlermeldung und auch die entsprechende Zeile gepostet, wären sämtliche Posts in dem Thread hinfällig gewesen.
                          [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

                          Kommentar


                          • #14
                            Zitat von tkausl Beitrag anzeigen
                            PS: Hättest du gleich die komplette Fehlermeldung und auch die entsprechende Zeile gepostet, wären sämtliche Posts in dem Thread hinfällig gewesen.
                            Ich habe alles gepostet was ich hatte. Da stand nicht mehr in der Fehlermeldung, als "Undefined variable: backid in ... on line 68"

                            Und die Zeile 68 ist
                            echo $backid;

                            Dann mal Fehlermeldungen von SQL abfragen.
                            meinst du ungefähr so?
                            PHP-Code:
                            if(mysqli_stmt_prepare($backstmt$backquery)) :
                                        ...
                                else :
                                        die(
                            'mysqli error: '.mysqli_error($verbindung));
                                endif; 
                            Dann kommt folgendes:
                            mysqli error: Commands out of sync; you can't run this command now

                            Kommentar


                            • #15
                              Genau, und via google:

                              https://www.google.at/search?q=Comma...is+command+now

                              erster Treffer:

                              http://stackoverflow.com/questions/6...active#tab-top

                              LG
                              The string "()()" is not palindrom but the String "())(" is.

                              Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                              PHP.de Wissenssammlung | Kein Support per PN

                              Kommentar

                              Lädt...
                              X