[英]SQL query in Foreach loop using array variable
更新:
工作代码,谢谢乔恩朝着正确的方向前进。
<?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; <----没有从数据库中获取任何信息
任何帮助都会很棒。 谢谢。
这是我正在使用的代码:
<?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;
}
}
}
}
?>
您的代码有很多问题,但是我们将从您的第二条语句开始。
$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->execute()
,您提供的大多数代码块都是嵌套的,这本身很好,但是,稍后在同一块中,您可以准备另一条语句,这是完全可以接受的,但是首先将其分配给用于循环的相同$stmt
变量,这也会引起问题,您将需要为第二个变量分配一个新变量准备好的语句,因此您可以使用新的数据集。此外,返回到我之前发布的上一个块,您将希望将其获取到不是 $row
的变量,因为它也是一个使用过的变量。
更新:正如乔恩指出的那样,我的答案适用于Zend_Db_Adapter而不适用于PDOStatement(您正在使用)。 我很抱歉。
问题可能是您正在第二个SQL查询上$stmt->execute()
。 execute()
不返回结果,您要做的是fetch()
,它确实返回结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.