MySQL行数> 1但SELECT只返回1?

时间:2013-04-15 22:28:08

标签: php mysql while-loop

我有一个简单的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'];
             }
        }

3 个答案:

答案 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 变量。