私はPDOを使い始めており、MySQLiの手続き的に構造化されたPHPコードをオブジェクト指向のPDO構造に変更しようとしています。私はちょうど準備、実行、bindParam/bindValueなどを成功の程度まで学んでいます。サブクエリを使用したPDOの準備
私の質問は、ユーザーのサブミット値がそのクエリのサブクエリにあるときに、どのようにクエリを準備するのですか?
私は、phpのサブクエリとして変数を使用しています($ playerOne、$ playerTwoはユーザが提出した値です)。
$sqlPlayerOne = "(SELECT * FROM players WHERE Player_name = $playerOne)";
$sqlPlayerTwo = "(SELECT * FROM players WHERE Player_name = $playerTwo)";
これは、これらのプレーヤーのすべてのレコードを取得するためです。私は、例として、彼らがプレイしたゲームをお互いに比較することができます。
$sqlWith = "SELECT * FROM $sqlPlayerOne s1
WHERE EXISTS (SELECT * FROM $sqlPlayerTwo s2 WHERE s1.Team_name = s2.Opposing_team)
注:SELECT *
は、ここでより読みやすくするために使用されています。
$pdoWith = $db->prepare($sqlWith)
を実行するだけで十分ですか、それとも$sqlPlayerOne
を準備する必要がありますか?
サブクエリをコピーする必要があるすべてのメインクエリの中にサブクエリをコピーして貼り付けることができたと思います。
EDIT:明快さのために申し訳ありません。これを変更する前に、これは私のコードの一部でした。私はそれをどうやって変更しなければならないのか分かりませんでした。私がちょうどそれを@JC FORESTが指摘した方法に似を行う必要がありますようだ:
$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();
あなたは何をしようとしていますか、私は事を理解していません。あなたがやっていることは許されていません。これらの3つのクエリで何をしたいのかを意識する必要があり、サブクエリがあっても1つのクエリを準備するだけです – 131
PDOの準備文が実際にどのように機能するのか分かりますか? **プレースホルダ**は何ですか?あなたの$ sqlPlayerOne変数は、 "bindParam/bindValueなどで"使用されていることの兆候を表示しません。 –
これは混乱しています。質問を編集して、何か違うものを尋ねた後、元のコードの何が間違っているかを説明したり、PDOの構文について説明したりすることはできません。 –