-1

PDO を使用した SQL クエリの実装に問題があります。

$friend_emails = $pdo->prepare("SELECT DISTINCT User2
                    FROM members
                    WHERE User1 = '$user'
                    UNION
                    SELECT DISTINCT User1
                    FROM members
                    WHERE User2 = '$user'");
$friend_emails->execute();

for($i=0; $row = $friend_emails->fetch(); $i++) { 
    echo "foo";
}

「foo」はまったく表示されません。$row と $friend_emails->fetch() を var_dumped しましたが、どちらも

boolean false

その理由は正確にはわかりませんが、データの配列が返されると思いました。

どんな助けでも大歓迎です!

4

3 に答える 3

1

問題は変数名が間違っていることです

によって返される変数に$pdo->prepare()は、単一の電子メールではなく、PDO ステートメントが含まれます。したがって、それに応じて名前を付ける必要があります。
また、準備されたステートメントを使用していない必要があります

したがって、mo はこのコードを一貫性があり、読みやすいものにします。

$sql = "SELECT DISTINCT User2 FROM members WHERE User1 = ?
        UNION
        SELECT DISTINCT User1 FROM members WHERE User2 = ?";
$stmt = $pdo->prepare();
$stmt->execute(array($user,$user));
$emails = $stmt->fetchAll(PDO::FETCH_COLUMN, 0)

これで、繰り返し処理できる便利な配列に電子メールができました。

foreach($emails as $email) {
    echo $email;
}

また、この回答に示されているように、PHP と PDO を構成して、エラーが発生した場合にすべてのエラーを表示できるようにする必要があります (クエリ エラーは、コード全体が失敗する可能性が非常に高いため)。

于 2013-05-14T09:50:31.903 に答える