-1

我有一个带有 PDO 的简单 MySQL 查询,即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'];
             }
        }
4

3 回答 3

1

您正在$stmt基于同一变量的 while 循环内分配给您的$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);
于 2013-04-15T22:38:04.953 回答
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'];
         }
于 2013-04-15T22:38:20.423 回答
0

while块中,您正在执行以下语句:

$stmt = $db->prepare("SELECT * FROM users WHERE userID=:userID");

这将覆盖while语句中使用的$stmt变量。

于 2013-04-15T22:42:37.207 回答