Ich bin ziemlich neu in PDO und versuche, meinen MySQLi prozedural strukturierten PHP-Code in eine objektorientierte PDO-Struktur zu ändern. Ich lerne gerade über das Vorbereiten, Ausführen, BindParam/BindValue und dergleichen, zu einem gewissen Grad an Erfolg.PDO mit Unterabfragen vorbereiten
Meine Frage ist, wie ich eine Abfrage vorbereiten, wenn der Benutzer Wert in einer Unterabfrage dieser Abfrage eingereicht hat?
Ich habe eine Variable als Unterabfrage in PHP verwendet (wobei $ playerOne, $ playerTwo vom Benutzer übergebene Werte sind).
$sqlPlayerOne = "(SELECT * FROM players WHERE Player_name = $playerOne)";
$sqlPlayerTwo = "(SELECT * FROM players WHERE Player_name = $playerTwo)";
Dies ist es, alle Datensätze für diese Spieler zu erhalten. Ich kann dann als Beispiel vergleichen, welche Spiele sie gegeneinander gespielt haben, z.
$sqlWith = "SELECT * FROM $sqlPlayerOne s1
WHERE EXISTS (SELECT * FROM $sqlPlayerTwo s2 WHERE s1.Team_name = s2.Opposing_team)
Hinweis: SELECT *
wird nur verwendet, um es hier besser lesbar zu machen.
Ist es genug zu tun $pdoWith = $db->prepare($sqlWith)
oder sollte ich die $sqlPlayerOne
zuerst vorbereiten, da dies der Benutzer Wert eingereicht hat?
Ich weiß, ich konnte nur die Unterabfrage innerhalb jeder einzelnen Hauptabfrage kopieren, die es brauchte, aber wenn ich nicht muss, würde ich lieber nicht.
EDIT: Sorry für den Mangel an Klarheit. Dies war ein Teil meines Codes, bevor ich ihn änderte, da ich nicht sicher war, wie ich ihn ändern müsste. Es scheint, ich will nur, um es ähnlich zu tun haben, wie @JC WALD wies darauf hin:
$dsn = "mysql:host=localhost;dbname=database";
$username = "user";
$password = "pass";
$db = new PDO($dsn, $username, $password);
$stmt = $db->prepare("SELECT * FROM (SELECT * FROM players WHERE Player_name = :playerone)
s1 WHERE EXISTS (SELECT * FROM (SELECT * FROM players WHERE Player_name = :playertwo) s2
WHERE s1.Team_name = s2.Opposing_team)");
$stmt->bindValue(':playerone', $playerOne);
$stmt->bindValue(':playertwo, $playerTwo);
$stmt->execute();
Was versuchst du zu tun, ich verstehe nichts. Was Sie tun, ist nicht erlaubt. Sie müssen genau wissen, was Sie mit diesen 3 Abfragen tun möchten, und Sie müssen nur eine Abfrage vorbereiten, auch wenn sie Unterabfragen enthält. – 131
Wissen Sie, wie die PDO-vorbereitete Anweisung tatsächlich funktioniert? Hast du eine Idee, was ein ** Platzhalter ** ist? Ihre $ sqlPlayerOne-Variable zeigt kein Anzeichen dafür, dass sie mit "bindParam/bindValue und ähnlichem" verwendet wird. –
Dies wurde verwirrend. Sie haben die Frage bearbeitet, um etwas anderes zu fragen, und dann eine Antwort angenommen, die weder erklärt, was mit dem ursprünglichen Code nicht stimmt, noch die PDO-Syntax erklärt. Ich hoffe, du hast die Grundlagen der vorbereiteten Aussagen verstanden und nicht einfach blind den Code in dein Projekt eingefügt ;-) –