如何使用PDO回显表中的每个项目?

时间:2018-06-27 14:39:05

标签: php pdo

我想从符合条件的表中回显所有内容,目前应该是3行匹配,但仅回显1行。

public function fetchInventoryItems($user_id)
{
    try
    {
        $stmt = $this->db->prepare("SELECT * FROM items WHERE item_owner=? 
AND inventory=?");
        $stmt->execute([$user_id,'1']);
        if ($stmt->rowCount() > 0)
        {

            while($userRows = $stmt->fetch(PDO::FETCH_ASSOC))
            {   

                $itemId = $userRows['item_id'];
                $stmt = $this->db->prepare("SELECT * FROM items_db WHERE 
   item_id=?");
                  $stmt->execute([$itemId]); 

                     while($itemRows = $stmt->fetch(PDO::FETCH_ASSOC))
                      {

                          echo '<div  class="dragcontainer inventory" ><div 
  id="'.$itemRows['item_id'].'" class="item '.$itemRows['item_type'].'" 
   style="background-image:url('.$itemRows['item_icon'].')" draggable="true"> 
 </div></div>';    
                       }

              }
           }
      }
      catch(PDOException $e)
      {
          echo $e->getMessage();
      }    
 }

第一次读取应检索3行,而while循环仅循环一次。 我想这与PDO有关,但我不知道到底是什么

1 个答案:

答案 0 :(得分:0)

在线...

$stmt = $this->db->prepare("SELECT * FROM items_db WHERE item_id=?");

您将在外部循环中覆盖$stmt的使用。将此版本以及对该版本的任何其他使用({$stmt1都可以)...

$stmt1= $this->db->prepare("SELECT * FROM items_db WHERE item_id=?");

您可以将这两个SQL查询重新整理为1条SQL语句,这样可以减少开销并停止此类问题。