PHP PDO sql查询和结果
我遇到了使用PDO实现SQL查询的问题。PHP 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 $行和$ friend_emails->取()这两者都是一个
boolean false
,所以我不能完全确定这是为什么,我认为这将返回数据的数组。
任何帮助,非常感谢!
使用,而这里
while($row = $friend_emails->fetch()) {
echo "foo";
}
您的循环将不会执行,因为
for($i=0; $row = $friend_emails->fetch(); $i++)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // here $i is not present
正确的格式将是
for($i=0; $i <= count($friend_emails->fetch()); $i++)
因此,我应该使用while循环还是新的for循环? – 2013-05-14 09:44:59
@CoreyThompson你可以尝试这两个,但虽然比从db获取记录更好, – 2013-05-14 09:46:10
刚刚意识到我的问题是一个SQL问题,但while循环更好,所以我使用它。谢谢! – 2013-05-14 09:46:10
更改您的代码
$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));
我现在已经改变它到这个,但for循环仍然不输出“东西”:( – 2013-05-14 09:42:18
我的错误是在SQL中,对不起我的坏。感谢您的帮助和 – 2013-05-14 09:46:40
你的问题是错误的变量名称。
由$pdo->prepare()
返回的变量不包含单个电子邮件,但包含PDO语句。因此它应该被相应地命名。
还没有使用预处理语句,而你应该
所以,莫使代码一致和易读:
$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作为this answer证明能够看看是否有任何发生的所有错误(如曲可能是整个代码失败的可能原因)
执行()调用之后,检查$ friend_emails-> errorInfo()以获取任何错误消息。另外,如果你使用'prepare()'语句,你不应该在那里插入动态值,而是在后面的'execute()'中。 – Sirko 2013-05-14 09:37:00
顺便说一句,为什么在使用字符串插值时使用'prepare'而不是真的准备好你的语句? – 2013-05-14 09:38:26
@Sirko我添加了 - > errorInfo(),我需要回显它吗?如果没有,那么就没有错误。 – 2013-05-14 09:40:53