更新:
工作代码,感谢jon推动正确的方向。
<?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 / echo $ itemName2; &lt; ----没有从数据库中获取任何信息
任何帮助都会很棒。感谢。
这是我正在使用的代码:
<?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;
}
}
}
}
?>
答案 0 :(得分: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
的变量,因为它也是一个使用过的变量。
答案 1 :(得分:0)
更新:正如Jon所指出的,我的答案适用于Zend_Db_Adapter而不适用于PDOStatement(您正在使用)。道歉。
问题可能是你正在对第二个SQL查询进行$stmt->execute()
。 execute()
不返回结果,您要做的是fetch()
,它会返回结果。