PDO Anfängerfrage

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

  • PDO Anfängerfrage

    Guten Tag zusammen,

    ich möchte mit PDO (PHP MySQL) meine Datenbank abfragen.
    Nun bekomme ich das noch einfach hin, wenn es eine Tabelle ist.
    Leider schnalle ich nicht, wie das mit einem Join funktioniert.
    Also ich verstehe JOINs und kann diese auch ohne Probleme in einem SQL Statement direkt in der DB eingeben und bekomme die gewünschten Ergebnisse.

    Ich denke - ich weiß nicht so recht, wie ich die WHILE Schleife formatieren muss.

    Meine Abfrage:
    PHP-Code:
    $query $pdo->prepare("SELECT * 
                                FROM user AS T1
                                JOIN artikel AS T2
                                ON T1.id = T2.fk_user_id
                                WHERE T1.id = 
    $userid
                                "
    );
    $query->execute();
        while (
    $user $query->fetch()){

    Wie gesagt - mit einer Tabelle funktioniert das Super wenn ich in der Whilfe Schleife die gewünschen Daten wie folgt anfordere:

    PHP-Code:
    $user['vorname'
    Nun möchte ich aber auch aus der Artikel Tabelle Daten holen.
    Meine Frage - in der Whilfe Schleife steht nun nur $user =
    Wie muss ich das Umschreiben, damit ich z.B. auch Felder wie folgt holen kann:
    PHP-Code:
    $artikel['artikelname'
    Irgendwo stehe ich hier auf dem Schlauch.
    Vielen Dank Euch!!!!

  • #2
    Du solltest niemals SELECT * verwenden, sondern im SELECT immer die Spalten angeben, die du im Ergebnis haben möchtest.

    Dein prepare() ist übrigens komplett sinnlos, wenn du $userid direkt in den SQL-Code schreibst.

    Kommentar


    • #3
      Zitat von h3ll Beitrag anzeigen
      Du solltest niemals SELECT * verwenden, sondern im SELECT immer die Spalten angeben, die du im Ergebnis haben möchtest.

      Dein prepare() ist übrigens komplett sinnlos, wenn du $userid direkt in den SQL-Code schreibst.
      Ok - das mit Select * ist mir vollkommen klar. Bin eben dabei ein Projekt zu machen für meine Prüfung. Werde das auch umgehend ändern in die einzelnen Spalten.

      Ich habe jedoch keine Ahnung - nur eine Vermutung, warum das $userid nicht im SQL-Code erscheinen soll. Ich denke, ich mach damit die Sicherheit kaputt?

      Aber wie denn sonst?

      Ich nutze dieses Forum, da das Internet mitlerweile voll mit Antworten ist, die eben nicht so ganz zu meiner Frage passen.

      Oder soll ich doch lieber wieder mySQLi benutzen? Ich benutze eh eine MySQL Datenbank. Ich dachte, ich nehme das aktuellste (PDO) - hab mir aber damit selbst ins Knie geschossen, da ich nicht damit klar komme.

      Kommentar


      • #4
        Wenn du dir das PHP-Handbuch zu prepare() ansiehst, wirst du feststellen, dass im SQL-Code Platzhalter für die Werte verwendet werden:

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

        Zum Beispiel:

        PHP-Code:
        $sql 'SELECT foobar FROM my_table WHERE user_id = :user_id';
        $stmt $pdo->prepare($sql);
        $stmt->execute(['user_id' => 123]); 

        Kommentar


        • #5
          Ja, dort hatte ich mich schon umgesehen. Leider finde ich keine Antwort zu meiner oben gestellen Frage.
          Ich habe zwar nun einen Code, der anscheinend dem entspricht wie es sein soll - und auch immer noch genauso funktioniert wie vorher - aber keine Antwort, wie ich $artikel in die WHILE Schleife dazu bekomme.

          PHP-Code:
          $query $pdo->prepare("SELECT user.id,user.vorname,user.nachname,user.telefon,user.email,
                                          user.bemerkung,
                                          artikel.id,artikel.art,artikel.hersteller,artikel.beschreibung,
                                          artikel.internebezeichnung,artikel.fk_user_id
                                          FROM user 
                                          JOIN artikel
                                          ON user.id=artikel.fk_user_id
                                          WHERE user.id = :userid"
          );

              
          $query->execute(array('userid'=>$userid));
              while (
          $user $query->fetch()){ 
          Ist das überhaupt möglich? Ich hole mir die einzelnen Felder wie oben angegeben und verlinke z.B. die Mail Adresse - also ich muss in der Lage sein, jedes einzelne Feld individuell bearbeiten zu können. Geht das mit PDO?
          Sonst muss ich noch umsteigen - hab nämlich nur noch bis nächste Woche Zeit mit dem Projekt
          Zuletzt geändert von qiwi; 18.05.2022, 17:49.

          Kommentar


          • #6
            PHP-Code:
            $sql "
                SELECT
                    u.id userId,
                    u.vorname,
                    u.nachname,
                    u.telefon,
                    u.email,
                    u.bemerkung,
                    a.id artikelId,
                    a.art,
                    a.hersteller,
                    a.beschreibung,
                    a.internebezeichnung
                FROM
                    user u
                JOIN
                    artikel a ON u.id = a.fk_user_id
                WHERE
                    u.id = :userid
            "
            ;

            $stmt $pdo->prepare($sql);
            $stmt->execute(['userid' => $userid]);

            while (
            $row $stmt->fetch(PDO::FETCH_ASSOC)) {
                echo 
            'User ID: ' $row['userId'] . ', Artikel ID: ' $row['artikelId'] . PHP_EOL;

            Kommentar


            • #7
              Vielen Dank,

              das werde ich mal ausprobieren und mir die Sachen, die nicht so ganz verstehe - die werde ich mal nachschlagen wie z.B. PDO::FETCH_ASSOC. Das wird wohl das Auschlaggebende gewesen sein.

              Hab auch nun schon öfter - jetzt eben hier wieder - gesehen, dass man die Anweisung in eine Variable $sql speichert.

              Danke - werde das nun mal umsetzen.

              Kommentar

              Lädt...
              X