PHP 7 Simple Abfrage -> BindParam ?

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

  • PHP 7 Simple Abfrage -> BindParam ?

    Hi,

    ich komme von PHP5.x, da war die Welt noch in Ordnung, notgedrungen muss ich mich mit dem Wirrwarr PHP7 nun auseinandersetzen.

    Ich habe daher Folgende Frage:

    PHP-Code:

        $stmt 
    $mysql->prepare("SELECT * FROM postfach WHERE anID ='1'"); 
          
    $stmt->execute();
          
    $count $stmt->rowCount();
          while (
    $row $stmt->fetch()) {
            
    $text $row["text"];          
                     echo 
    "$text";    

          } 
    Funktioniert wie es soll.. Nun das Problem -> $userID soll verwendet werden .........

    PHP-Code:
          $userID $_SESSION["user_id"];
          
    $stmt $mysql->prepare("SELECT * FROM postfach WHERE anID = :userID"); 
          
    $stmt->bindParam(':userID'$userIDPDO::PARAM_STR);
          
    $stmt->execute();
          
    $count $stmt->rowCount();
          while (
    $row $stmt->fetch()) {
            
    $text $row["text"];          
                     echo 
    "$text";    

          } 
    ich habe bereits sämtliche varianten von
    PHP-Code:
    $stmt->bindParam(':userID'$userID); 
    $stmt->bindParam(':userID''25');
    $stmt->bindParam(':userID'$userIDPDO::PARAM_STR);
    $stmt->bindParam(':userID'$userIDPDO::PARAM_INT);
    $stmt->execute(array(':userID' =>'25')) 
    ausprobiert, ich bekomme es nicht hin, selbst die Beispiele von der PHP Doku klappten nicht... Whats Wrong?

    im Übrigen klappt das Simple

    PHP-Code:
    $stmt $mysql->prepare("SELECT * FROM postfach WHERE anID ='$userID'"); 
    auch nicht mehr, wieso muss man bei PHP7 das Rad neu erfinden


    Könnte mir vielleicht jemand einen heißen Tipp geben ?
    Zuletzt geändert von TheGateway; 26.08.2021, 14:37.

  • #2
    Sieht für mich nach PHP 5 Code aus. Du verwendest hier nichts, was ein PHP 7-Feature wäre.

    Was genau heißt "bekomme es nicht hin"? Was ergibt das Debugging?

    Kommentar


    • #3
      Zitat von h3ll Beitrag anzeigen
      Sieht für mich nach PHP 5 Code aus. Du verwendest hier nichts, was ein PHP 7-Feature wäre.

      Was genau heißt "bekomme es nicht hin"? Was ergibt das Debugging?
      ich wüsste nicht das PHP5.x etwas wie execute(); verwendet und wenn scheint es gottseidank an mir vorbei gegangen zu sein . (mag auch der Driver PDO sein) aber das mein ich ja :P

      Debugging wäre das nächste Problem, er zeigt mir keine Fehler an, weder in der error Log, noch als ausgabe.. gebe ich
      PHP-Code:
      echo $count
      aus kommt ne 0. Das liegt wohl daran das ich die $userID im SELECT nicht rein bekomme.

      früher ging es anstandslos:
      PHP-Code:
      mysql_query("SELECT * FROM postfach WHERE anID ='$userID'"); 
      nun geht nüscht mehr *grrrr*
      PHP-Code:
      $stmt $mysql->prepare("SELECT * FROM postfach WHERE anID ='$userID'"); 

      funktionieren, tut es aber nicht, er frisst einfach die $userID nicht, schreib ich ne '25' rein zeigt er mir das an, was er soll.
      Zuletzt geändert von TheGateway; 26.08.2021, 14:58.

      Kommentar


      • #4
        Zitat von TheGateway Beitrag anzeigen
        ich wüsste nicht das PHP5.x etwas wie execute(); verwendet und wenn scheint es gottseidank an mir vorbei gegangen zu sein .
        mysqli (und somit auch die execute-Methode) gibt es seit PHP 5.0.0 am 13. Juli 2004. Also 17 Jahre lang.

        Zitat von TheGateway Beitrag anzeigen
        Debugging wäre das nächste Problem, er zeigt mir keine Fehler an, weder in der error Log, noch als ausgabe.. gebe ich
        PHP-Code:
        echo $count
        aus kommt ne 0. Das liegt wohl daran das ich die $userID im SELECT nicht rein bekomme.
        Und was ergibt ein var_dump($userID)?

        Zitat von TheGateway Beitrag anzeigen
        Da es wohl kein PHP7 Code ist, ,müsste ja
        PHP-Code:
        $stmt $mysql->prepare("SELECT * FROM postfach WHERE anID ='$userID'"); 
        funktionieren, tut es aber nicht, er frisst einfach die $userID nicht, schreib ich ne '25' rein zeigt er mir das an, was er soll.
        Das hat aber mit PHP 7 nichts zu tun, sondern mit einem fehlerhaften Code.

        Kommentar


        • #5
          Zitat von h3ll Beitrag anzeigen
          mysqli (und somit auch die execute-Methode) gibt es seit PHP 5.0.0 am 13. Juli 2004. Also 17 Jahre lang.



          Und was ergibt ein var_dump($userID)?



          Das hat aber mit PHP 7 nichts zu tun, sondern mit einem fehlerhaften Code.

          genau du hast recht, es liegt am driver, der für mich neu ist, deswegen bin ich ja hier, ich kenne das so alles nicht und google hat mir leider nicht geholfen, sonst wäre ich nicht hier

          PHP-Code:
          var_dump($userID); 
          ergibt: string(2) "25"

          ich sollte am debugging anfangen ....
          wie gebe ich den SELECT Befehl aus den er ausführen soll ?
          Da würde ich sehen ob der SELECT befehl richtig ist ...
          ich denke wenn ich wüsste wie die ausgabe funktioniert, wäre ich schon viel weiter...
          Zuletzt geändert von TheGateway; 26.08.2021, 15:09.

          Kommentar


          • #6
            Ich persönliche finde ja Prepared Statements in mysqli ziemlich mühsam und habe ich selber nie wirklich verwendet, kann da also nur begrenzt helfen. Wenn man die verwenden will, würde ich persönlich gleich auf PDO wechseln oder halt mysqli ohne Prepared Statements verwenden.

            PDO gibts übrigens seit PHP 5.1 (24. November 2005) und ist eigentlich für "neue" Projekte (also alles, was in den letzten 15 Jahren begonnen wurde) vorzuziehen. Warum es noch so viele Projekte gibt, die auf mysqli oder gar auf mysql (was noch von PHP 4 stammt, also von der Jahrtausendwende) aufbauen, ist mir ein Rätsel. Ich selber kenne mysqli nur von historisch alten Projekten, mit denen ich vor über 10 Jahren mal gearbeitet habe und mysql habe ich in meine Programmiererlaufbahn noch nie verwendet.

            Aber ja, wer 20 Jahre altes Zeug verwendet, der hat jetzt beim Wechsel auf PHP 7 wohl einige Probleme, nachdem einige Kompatibilitäten zu PHP 4 fallen gelassen wurden.

            mysqli verhält sich zwischen PHP 5 und PHP 7 meines Wissens nach gleich. Also wenn der Code so in PHP 5 funktoniert, dann auch in PHP 7 und umgekehrt.
            Zuletzt geändert von h3ll; 26.08.2021, 15:23.

            Kommentar


            • #7
              Zitat von h3ll Beitrag anzeigen
              Ich persönliche finde ja Prepared Statements in mysqli ziemlich mühsam und habe ich selber nie wirklich verwendet, kann da also nur begrenzt helfen. Wenn man die verwenden will, würde ich persönlich gleich auf PDO wechseln oder halt mysqli ohne Prepared Statements verwenden.

              PDO gibts übrigens seit PHP 5.1 (24. November 2005) und ist eigentlich für "neue" Projekte (also alles, was in den letzten 15 Jahren begonnen wurde) vorzuziehen. Warum es noch so viele Projekte gibt, die auf mysqli oder gar auf mysql (was noch von PHP 4 stammt, also von der Jahrtausendwende) aufbauen, ist mir ein Rätsel. Ich selber kenne mysqli nur von historisch alten Projekten, mit denen ich vor über 10 Jahren mal gearbeitet habe und mysql habe ich in meine Programmiererlaufbahn noch nie verwendet.

              Aber ja, wer 20 Jahre altes Zeug verwendet, der hat jetzt beim Wechsel auf PHP 7 wohl einige Probleme, nachdem einige Kompatibilitäten zu PHP 4 fallen gelassen wurden.

              mysqli verhält sich zwischen PHP 5 und PHP 7 meines Wissens nach gleich. Also wenn der Code so in PHP 5 funktoniert, dann auch in PHP 7 und umgekehrt.
              da gebe ich dir recht, ich habe ausschließlich mit mysql gearbeitet.

              Könntest du mir noch verraten wie ich den Select Befehl ausgebe um zu überprüfen ob er alle variablen genommen hat?

              Kommentar


              • #8
                Zitat von TheGateway Beitrag anzeigen
                Könntest du mir noch verraten wie ich den Select Befehl ausgebe um zu überprüfen ob er alle variablen genommen hat?
                Das ist meines Wissens nach nicht möglich. Du kannst testweise ein "SELECT :userID" machen und schauen, ob der Wert dann im Abfrageergebnis landet.

                Kommentar


                • #9
                  Also wenn ich mir die Doku anschaue, werden von mysqli wohl gar keine Named Parameter wie :userID unterstützt, sondern nur Question Mark Parameter:

                  https://www.php.net/manual/de/mysqli.prepare.php

                  Also das was du machen willst geht so gar nicht.

                  Kommentar


                  • #10
                    Zitat von h3ll Beitrag anzeigen
                    Also wenn ich mir die Doku anschaue, werden von mysqli wohl gar keine Named Parameter wie :userID unterstützt, sondern nur Question Mark Parameter:

                    https://www.php.net/manual/de/mysqli.prepare.php

                    Also das was du machen willst geht so gar nicht.
                    sei mich nich böse, aber ich blicke garnichts mehr.

                    PHP-Code:
                    $stmt2 $mysql->prepare("SELECT * FROM users WHERE id = :vonID"); 
                        
                    $stmt2->execute(array(':vonID' => $vonID)); 
                    funktioniert, liegt wohl daran das ich kein mysqli nutze sondern PDO ? ich sagte eingangs das es an PHP7 liegt dieses durcheinander, aber ich habe jetzt erkannt das es ausschließlich nur an dem Driver PDO, Mysqli, Mysql liegt. Ich komme von MYSQL und daher dieses wirrwar.

                    das Problem liegt also bei mir und meiner Unkenntnis diese Driver auseinander zu halten.

                    Kommentar


                    • #11
                      Sorry, das ist mein Fehler. Habe überlesen, dass es sich um PDO handelt.

                      PHP-Code:
                      $pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8mb4''root''', [
                          
                      PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
                      ]);

                      $userID '25';

                      $stmt $pdo->prepare('SELECT :userID');
                      $stmt->execute([':userID' => $userID]);

                      var_dump($stmt->fetch(PDO::FETCH_NUM)); 
                      Ausgabe:
                      Code:
                      array(1) {
                        [0]=>
                        string(2) "25"
                      }
                      Und hier eine Abfrage mit Beispieldaten:
                      PHP-Code:
                      $pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8mb4''root''', [
                          
                      PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
                      ]);

                      $pdo->query("
                          CREATE TEMPORARY TABLE users (
                              id INTEGER NOT NULL AUTO_INCREMENT,
                              username VARCHAR(255) NOT NULL DEFAULT '',
                              PRIMARY KEY (`id`)
                          ) CHARSET=utf8mb4
                      "
                      );

                      $stmt $pdo->prepare("INSERT INTO users (username) VALUES (?)");
                      $stmt->execute(['foo']);
                      $stmt->execute(['bar']);
                      $stmt->execute(['bar']);


                      $userId 2;

                      $stmt $pdo->prepare("SELECT id, username FROM users WHERE id = :userId");
                      $stmt->execute([':userId' => $userId]);

                      var_dump($stmt->fetch(PDO::FETCH_ASSOC)); 
                      Ausgabe:
                      Code:
                      array(2) {
                        ["id"]=>
                        string(1) "2"
                        ["username"]=>
                        string(3) "bar"
                      }
                      Zuletzt geändert von h3ll; 26.08.2021, 17:12.

                      Kommentar

                      Lädt...
                      X