-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”根本不显示。我 var_dumped $row 和 $friend_emails->fetch() 两者都是

boolean false

所以我不确定为什么会这样,我认为它会返回一个数据数组。

任何帮助是极大的赞赏!

4

3 回答 3

1

在这里使用

while($row = $friend_emails->fetch()) { 
   echo "foo";
}

你的 for 循环永远不会执行,因为

for($i=0; $row = $friend_emails->fetch(); $i++)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // here $i is not present

正确的格式是

for($i=0; $i <= count($friend_emails->fetch()); $i++)
于 2013-05-14T09:39:31.797 回答
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 回答
-1

将您的代码更改为

$friend_emails = $pdo->prepare("SELECT DISTINCT User2
                    FROM members
                    WHERE User1 = :user
                    UNION
                    SELECT DISTINCT User1
                    FROM members
                    WHERE User2 = :user");
$friend_emails->execute(array('user' => $user));
于 2013-05-14T09:39:00.933 回答