Ankündigung

Einklappen
Keine Ankündigung bisher.

Schwierigkeiten mit SELECT und Prepared Statements

Einklappen

Neue Werbung 2019

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

  • Schwierigkeiten mit SELECT und Prepared Statements

    Hallo, ich möchte über eine Zufallszahl, die ich in einer Tabelle in einer Datenbank gespeichert habe die ID zu einem Adresset ermitteln. Für die query arbeitet ich mit Prepared Statements. Folgenden Ansatz habe ich schon, jedoch weiß ich nun nicht, wie ich die gewünscht ID ausgebe? ($random ist initialisiert) Wie könnte man hier fortfahren? Vielen Dank!

    PHP-Code:
    $connect $db->prepare("SELECT ID from data_person WHERE rd_number = ?");
    $connect->bind_param("i"$random);
    $connect->execute();
    ... 

  • #2
    siehe hier: PHP: Prepared Statements und Stored Procedures Manual

    Zitat: Dieses Beispiel ruft Daten basierend auf einem Schlüsselwert ab, der von einem Formular geliefert wird. Die Benutzereingabe wird automatisch maskiert, deswegen gibt es kein Risiko eines SQL-Injection-Angriffs.
    PHP-Code:
    <?php
    $stmt 
    $dbh->prepare("SELECT * FROM REGISTRY where name = ?");
    if (
    $stmt->execute(array($_GET['name']))) {
      while (
    $row $stmt->fetch()) {
        
    print_r($row);
      }
    }
    ?>

    Kommentar


    • #3
      Ja, ich kenn das Beispiel. Ich konntes es auf meinen Fall eben nicht übertragen. Ich habe eben einen Wert, den ich in einer Funktion rd_number() ezeuge, der also nicht über ein Formularfeld eingelesen wird, zum anderen ist es ja auch kein Array sondern ein einzelner Wert!?

      Kommentar


      • #4
        aber fetch() oder fetch_all() hast du ja nicht gemacht, da ist es ja logisch, dass nichts zurückgeliefert wird.

        Kommentar


        • #5
          Zitat von KeithFlint Beitrag anzeigen
          Ich habe eben einen Wert, den ich in einer Funktion rd_number() ezeuge, der also nicht über ein Formularfeld eingelesen wird
          Du musst es eben auf dein Vorhaben anpassen, verwende eben deine Variable:

          PHP-Code:
          // Datenbank-Verbindung ...

          function rd_number() {
             
          // ...
             
          return $number;
          }

          $random rd_number();
          $stmt $db->prepare("SELECT `id`
                                FROM   `data_person`
                                WHERE  `rd_number` = ?"
          );
          $stmt->bind_param("i"$random);
          $stmt->execute();
          $stmt->bind_result($id);

          while(
          $stmt->fetch()) {
             echo 
          $id;

          Zitat von KeithFlint Beitrag anzeigen
          zum anderen ist es ja auch kein Array sondern ein einzelner Wert!?
          Es kann auch nur ein Wert in einem Array sein.

          Kommentar


          • #6
            Ja warum nicht umständlich wenn man das selbe gleich erreichen kann. Oder ist deine Zufall Zahl an einen besonderen Logorythmus gebunden?

            PHP-Code:
            SELECT 
             
            `id`
            FROM 
             
            `data_person`
            ORDER BY RAND() LIMIT 1 
            Mfg Splasch

            Kommentar


            • #7
              Danke Chris, das Beispiel gibt die gweünschten Werte aus!
              Trotz allem habe ich jetzt nochmals das Beispiel von maxory ausprobiert:

              PHP-Code:
              //HTML - Formular mit <input type="text" name="name">
              //db connection

              $stmt $db->prepare("SELECT * FROM data_person WHERE surname = ?");

              if (
              $stmt->execute(array($_GET['name']))) {
                while (
              $row $stmt->fetch()) {
                  
              print_r($row);
                }

              Jetzt bekomme ich seltsamerweise die Fehlermeldung
              mysqli_stmt::execute() expects exactely 0 parameters, 1 given in....

              Kommentar


              • #8
                oh ja du musst bind_param ausführen und dann execute() ohne parameter

                Kommentar


                • #9
                  Hier bekomme ich auch eine Fehlermeldung:

                  PHP-Code:

                  $stmt 
                  $db->prepare("SELECT *
                                        FROM data_person
                                        WHERE forename = ?"
                  );

                  $stmt->bind_param("s"$_GET['name']);
                  $stmt->execute();
                  $stmt->bind_result($result);

                  while(
                  $stmt->fetch()){
                      echo 
                  $result
                  Fehler:Warning: mysqli_stmt::bind_result() [mysqli-stmt.bind-result]: Number of bind variables doesn't match number of fields in prepared statement in C:\xampplite\htdocs\registrierung\hallo.php on line 41

                  Kommentar


                  • #10
                    bind_result() müssen soviele Variablen übergeben werden wie Felder sleketiert sind. Da ist natürlich SELECT * ... eine ganz blöde Idee.



                    PS: Der eine redet von PDO der andere von mysqli...

                    Kommentar


                    • #11
                      du hast vorher nicht geprüft, ob $_GET['name'] (nicht) exisitiert (isset( ) ) - dann hast du eben keine Daten für den String-Parameter im bind

                      Kommentar


                      • #12
                        Doch hab ich schon geprüft, Eagle,... ich hab eben auch probiert, ob ich $result als array() deklariere, da kommt aber die gleiche Fehlermeldung.

                        Kommentar


                        • #13
                          bind_param ist nicht das gleiche wie bind_result - siehe Manual.

                          Kommentar


                          • #14
                            Zitat von splasch Beitrag anzeigen
                            Logorythmus
                            made my day !

                            Kommentar


                            • #15
                              Da hilft nur der Logopäde.

                              Kommentar

                              Lädt...
                              X