PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks. |
 |

18-05-2022, 14:19
|
qiwi
Registrierter Benutzer
|
|
Registriert seit: May 2022
Beiträge: 4
|
|
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!!!!
|

18-05-2022, 14:48
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 3.880
|
|
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.
|

18-05-2022, 15:07
|
qiwi
Registrierter Benutzer
|
|
Registriert seit: May 2022
Beiträge: 4
|
|
Zitat:
Zitat von h3ll
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.
|

18-05-2022, 16:59
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 3.880
|
|
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]);
|

18-05-2022, 17:40
|
qiwi
Registrierter Benutzer
|
|
Registriert seit: May 2022
Beiträge: 4
|
|
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
Geändert von qiwi (18-05-2022 um 17:49 Uhr)
|

18-05-2022, 18:29
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 3.880
|
|
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; }
|

18-05-2022, 20:01
|
qiwi
Registrierter Benutzer
|
|
Registriert seit: May 2022
Beiträge: 4
|
|
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.
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Thema bewerten |
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|