1

更新:
工作代码,感谢乔恩朝着正确的方向推动。

<?php

     $stmt2 = $conn->prepare("SELECT * FROM userItems WHERE id=:id");

        foreach ($moodItems as $id2)
            {

    // bind the parameters
        $stmt2->bindValue(":id", $id2);    

      if ($stmt2->execute()) {

            if($result = $stmt2->fetch(PDO::FETCH_ASSOC)) {

    // initialise an array for the results 
            $itemName2 = $result['itemName'];
                $name2 = $result['userId'];
              echo $itemName2."<br>";
              echo $name2."<br>";
        }
     }
   }   
      ?>

我在 foreach 循环中使用 SQL 查询时遇到问题。我正在尝试使用第一个查询中的值(这是一个数组)并在第二个查询中使用它。

第一个查询可以正常工作以给我正确的值(数组)。但是由于某种原因,当我尝试在 foreach 中使用数组时它不能正常工作,它没有显示任何错误......它只是没有获取任何来自数据库的数据。
IE/回声 $itemName2; <----没有从数据库中获取任何信息

任何帮助都会很棒。谢谢。

这是我正在使用的代码:

<?php           
$attrs = array(PDO::ATTR_PERSISTENT => true);

$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

// prepare the statement.
$stmt = $conn->prepare("SELECT * FROM userMoodboard WHERE name=:name");

// bind the parameters
$stmt->bindValue(":name", $loggedInUser->username);

// initialise an array for the results 
if ($stmt->execute()) {

    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        $imageUrl = $row['imageUrl'];
            $moodItems = $row['moodItems'];
            $moodItems = json_decode($moodItems);

?>
<img src='<?php echo $imageUrl;?>' class="thumbnail"></img>
    <?php
    $stmt = $conn->prepare("SELECT * FROM userItems WHERE id=:id");

        foreach ($moodItems as $id)
               {
    // bind the parameters
        $stmt->bindValue(":id", $id);    

    // initialise an array for the results 
        if($stmt->execute()) {
            $itemName2 = $row['itemName'];
                $name2 = $row['userId'];

              echo $itemName2;
              echo $name2;
        }
        }   

    }

    }
?>
4

2 回答 2

1

您的代码有几处问题,但我们将从您的第二个陈述开始。

$stmt = $conn->prepare("SELECT userId FROM userItems WHERE id=:id");

foreach ($moodItems as $id)
{
    // bind the parameters
    $stmt->bindValue(":id", $id);    

    // initialise an array for the results 
    if($stmt->execute()) {
        $itemName2 = $row['itemName'];
        $name2 = $row['userId'];

        echo $itemName2;
        echo $name2;
    }
}

您正在尝试退出$row['itemName']$row['userId']但是,您永远不会在该查询中列出SELECT该列。itemName因此,如果您想要该信息,则必须先获得该信息select。除此之外,你execute是查询,但你永远不会fetch是信息行。

这些是为什么第二部分无法按您希望的方式工作的基础知识。

现在,为了更大的图景。您提供的大部分代码块都是嵌套if$stmt->execute(),然后是嵌套在while($row = ...其中,本身就可以了。但是,稍后在同一个块中,您准备了另一个语句,这是完全可以接受的,但是您首先将它分配给$stmt您用于循环的同一个变量,这也会给您带来问题。您需要为第二个准备好的语句分配一个新变量,以便您可以使用新数据集。此外,回到我发布的上一个块,您需要将它获取到一个不是 $row的变量,因为它也是一个使用的变量。

于 2013-10-13T00:52:37.077 回答
0

更新:正如 Jon 所指出的,我的回答适用于 Zend_Db_Adapter 而不是 PDOStatement(您正在使用的)。我很抱歉。

问题可能是您正在执行$stmt->execute()第二个 SQL 查询。execute()不返回结果,您要做的是 to fetch(),它确实返回结果。

于 2013-10-13T00:18:44.430 回答