我有一个简单的MySQL查询与PDO,SELECT * FROM table WHERE variable=:variable
,然后我执行它。我使用rowCount();
函数获取受影响的行计数,并返回20,针对我之后的特定条件。但是,当我移到while statement
时,只有一个结果被回显。此外,这是一个新问题,字面上刚刚开始发生在20分钟前。建议?
修改以添加代码
$stmt = $db->prepare("SELECT * FROM files WHERE `subject`=:subject ORDER BY title");
$stmt->execute(array(':subject' => $_GET['subject']));
$row_count = $stmt->rowCount();
if ($row_count > 0) {
echo $row_count;
echo "<div class='row'>";
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$stmt = $db->prepare("SELECT * FROM users WHERE userID=:userID");
$stmt->execute(array(':userID' => $row['userID']));
$resultsArray = $stmt->fetchAll(PDO::FETCH_ASSOC);
$resultsArray = $resultsArray[0];
$fullName = $resultsArray['name'];
$authorEmail = $resultsArray['email'];
}
}
答案 0 :(得分:1)
您正在分配while循环中的$stmt
变量,该变量基于相同的$stmt
变量。
替换以下代码:
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$stmt = $db->prepare("SELECT * FROM users WHERE userID=:userID");
$stmt->execute(array(':userID' => $row['userID']));
$resultsArray = $stmt->fetchAll(PDO::FETCH_ASSOC);
这个:
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$stmt2 = $db->prepare("SELECT * FROM users WHERE userID=:userID");
$stmt2->execute(array(':userID' => $row['userID']));
$resultsArray = $stmt2->fetchAll(PDO::FETCH_ASSOC);
答案 1 :(得分:0)
你在循环中覆盖$stmt
,因此它会停止正确地获取行。
您可以将它们更改为$stmt2
(或者甚至更具描述性的内容):
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$stmt2 = $db->prepare("SELECT * FROM users WHERE userID=:userID");
$stmt2->execute(array(':userID' => $row['userID']));
$resultsArray = $stmt2->fetchAll(PDO::FETCH_ASSOC);
$resultsArray = $resultsArray[0];
$fullName = $resultsArray['name'];
$authorEmail = $resultsArray['email'];
}
答案 2 :(得分:0)
在 while 块中,您正在执行以下语句:
$ stmt = $ db-&gt; prepare(“SELECT * FROM users WHERE userID =:userID”);
覆盖 while 语句中使用的 $ stmt 变量。