2017-06-13 12 views
0

ので、私は、PDOでいくつかのクエリを使用しようとしているが、唯一の第1の選択結果を示す、第2の選択いけない結果を示し、唯一の「Selecione」PDOクエリストップループ - PHPの

以下の私のコードを見て示して
<?php 
    $con1 = new PDO('mysql:host=localhost;dbname=db','root','passdb'); 
    $con1->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $sqlimpressora = $con1->query("SELECT * FROM impressoras"); 
    ?> 

    <html> 
     <body> 
     <form> 
       <select name="impressora" class="form-control"> 
        <option value="selecione">Selecione...</option> 
        <?php while($prod = $sqlimpressora->fetch(PDO::FETCH_BOTH)) { ?> 
        <option value="<?php echo $prod['nome'] ?>"><?php echo $prod['nome'] ?></option> 
        <?php } ?> 

       </select> 
      <select name="impressora" class="form-control"> 
        <option value="selecione">Selecione...</option> 
        <?php while($prod2 = $sqlimpressora->fetch(PDO::FETCH_BOTH)) { ?> 
        <option value="<?php echo $prod2['nome'] ?>"><?php echo $prod2['nome'] ?></option> 
      <?php } ?> 

          </select> 

      </form> 

     </body> 
     </html> 
+0

'の異なる名前属性を与えます。それから始めよう。 –

答えて

0

$sqlimpressora->fetch()を呼び出すたびに、結果セットの次のレコードにカーソルが移動します。したがって、最初のwhileループが終了すると、結果セットの末尾にカーソルが移動し、別のfetch()コールでは何もフェッチされませんでした。

一つの可能​​な解決策は、配列にレコードを取得し、それを反復処理するforeachを使用することです:

$rows = $sqlimpressora->fetchAll(); 

foreach ($rows as $prod) {} 

foreach ($rows as $prod) {} 
+0

ありがとう、私は変更され、その仕事は魅力のようです。 – Skidrow

+0

私は答えを1分早く受け取りました。( –

+0

あなたも大丈夫です;) – Skidrow

1

結果の上に->fetchAllとループを使用し、二回->fetchを使用しないでください。

$sqlimpressora = $con1->query("SELECT * FROM impressoras"); 
$result = $sqlimpressora->fetchAll(); 

foreach($result as $prod) { 

    // <select > ..... 
} 
+0

すごい、ありがとう、フランス語、働きました! – Skidrow