PDO ForEach循环数组(PHP)

时间:2015-05-27 11:56:59

标签: php mysql pdo

我希望将数据库中的所有结果都放在一个数组中

我的职能:

function GetWinkelProduct($g_Winkel) {
    global $g_Conn;

    $l_Stmt = $g_Conn->prepare("SELECT pd_id FROM `producten_:Winkel`");
    $l_Stmt->bindValue(':Winkel', $g_Winkel, PDO::PARAM_INT);
    $l_Stmt->execute();


    $l_qurries = new dbquery();
    $l_LastProduct = $l_qurries->GetLastProduct($g_Winkel);

    while($l_Row = $l_Stmt->fetch(PDO::FETCH_ASSOC)){
        $out = array();

        foreach($l_Row as $product){
            $out[] = $product['pd_id'];
        }
    }
        return $out;        
}

其他页面:<?php print_r($l_qurries->GetWinkelProduct($g_Winkel)); ?>

只有我得到数组中的第一个结果,当我$product['pd_id']时,我只得到最后一个结果。

2 个答案:

答案 0 :(得分:2)

试试这个......

在while循环中将fetch更改为fetchAll,并在while循环中重写foreach

function showDiv(id, posX, posY) {
  var obj = document.getElementById(id),
      objWidth = obj.offsetWidth,
      objHeight = obj.offsetHeight,
      docX = window.pageXOffset || document.documentElement.scrollLeft,
      docY = window.pageYOffset || document.documentElement.scrollTop,
      winWidth = document.documentElement.clientWidth,
      winHeight = document.documentElement.clientHeight;

  posX += docX;
  posY += docY;

  if (posX < docX) {
    posX = docX;
  } else if (posX + objWidth > winWidth + docX) {
    posX = docX + (winWidth - objWidth);
  }

  if (posY < docY) {
    posY = docY;
  } else if (posY + objHeight > winHeight + docY) {
    posY = docY + (winHeight - objHeight);
  }

  obj.style.top = posY + 'px';
  obj.style.left = posX + 'px';
  obj.style.display = 'block';
}

REF:http://php.net/manual/en/pdostatement.fetchall.php

答案 1 :(得分:0)

您必须在while循环之外初始化数组,并且不需要foreach。

这样你每次迭代时都会创建一个新数组,这样你最终会替换数组。

    $out = array();    
    while($l_Row = $l_Stmt->fetchAll(PDO::FETCH_ASSOC)){
          $out[] = $l_Row['pd_id'];
    }
    return $out;