1

更新:
WORKING CODE、正しい方向へのプッシュに感謝します。

<?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 クエリを使用すると問題が発生します。最初のクエリ (配列) の値を使用して、2 番目のクエリで使用しようとしています。

最初のクエリは正しく機能し、適切な値 (配列) を取得します。しかし、何らかの理由で 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

コードにはいくつか問題がありますが、2 番目のステートメントから始めます。

$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']決してありません。そのため、その情報が必要な場合は、最初に取得する必要があります。それとは別に、クエリは行いますが、情報を含む行は決して行いません。SELECTitemNameselectexecutefetch

これらは、2 番目の部分が希望どおりに機能しない理由の基本です。

さて、全体像について。あなたが提供するコードのブロックのほとんどは、if最初$stmt->execute()にネストされ、次にwhile($row = ...Which内にネストされています。それ自体は問題ありません。ただし、後で同じブロック内で別のステートメントを準備します。これは完全に受け入れられ$stmtますが、最初にループに使用しているのと同じ変数に割り当てます。これも問題を引き起こします。2 番目の準備済みステートメントに新しい変数を割り当てて、新しいデータセットを操作できるようにします。また、私が投稿した前のブロックに戻ると、使用されている変数でもあるので、ではない $row変数にフェッチする必要があります。

于 2013-10-13T00:52:37.077 に答える
0

更新: Jon が指摘したように、私の答えは Zend_Db_Adapter に適用され、PDOStatement (使用している) には適用されません。謝罪いたします。

問題はおそらく$stmt->execute()、2 番目の SQL クエリを実行していることです。execute()は結果を返しません。あなたがしたいことはfetch()、結果を返すことです。

于 2013-10-13T00:18:44.430 に答える