2017-06-27 17 views
0

私はコラージュプロジェクトに取り組んでおり、問題が発生しました。 データベースからすべてのレコードをフェッチするwhileループを作成します。whileループ内でfetch()が動作しません

私は、SQL文に使用するコード:

$sql2 = "SELECT * FROM phones WHERE users_id = '$user_id'"; 
$stm2 = $db->prepare($sql2); 
$stm2->execute(); 

私は、whileループに使用するコード:

<?php while ($record = $stm2->fetch()) :?> 
    <div class="col-md-2"> 
     Some text 
    </div> 
<?php endwhile; ?> 

このループが持っていない出力。プロジェクトを実行すると、何も表示されません。

最初にすべてのレコードをフェッチしてからvar_dumpしても問題ありません。つまり、データベースにレコードがあることがわかりますが、ループ内でこれらのレコードを使用することはできません。

私もこのコードを試しましたが、何も出てこなかったのです。

<?php while($record = $stm2->fetch()){ 
    echo '<div class="col-md-2">'; 
    echo 'Some text'; 
    echo '</div>'; 
} 
+0

このようには機能しません。 *実際の名前ではなく、名前付きの列を選択してbind_resultを使用してください。あなたはwhile($ stmt2-> fetch()){...}を実行できます:http://php.net/manual/en/mysqli.prepare.php mysqliの$ resultスタイルは、準備されたステートメントではありません。 – clearshot66

答えて

0

これを試してみてください:

$query = "SELECT * FROM phones WHERE users_id = '$user_id'"; 

if ($result = $mysqli->query($query)) { 

    /* fetch associative array */ 
    while ($row = $result->fetch_assoc()) { 
     printf ("%s (%s)\n", $row["FirstName"], $row["LastName"], ...); 
    } 

    /* free result set */ 
    $result->free(); 
} 

EDIT

これは単なる迅速かつ汚い例です...コメント

で提案されているように、あなたが実際に書類を作成使用する必要があります編集2

この行から, ...を削除します。あなたはそれはあなたが意図しているように見えるように動作するように取得するには、データベース

+0

EDITのタイムラインを追加しなくても、回答を編集してより明確にすることができます。 – pvg

1

からの出力に他の列を持っていない場合、あなたはこのようにそれを行う必要がありprintf ("%s (%s)\n", $row["FirstName"], $row["LastName"], ...);

まず、正確な列を選択します。

次に、?セキュリティのプレースホルダとして使用します。

第3に、パラメータを準備してクエリにバインドします。 iは整数、文字列はsです。

実行してからフェッチを実行します。

<?php 
    $sql2 = "SELECT col1,col2,col3 FROM phones WHERE users_id = ?"; 
    $stm2 = $db->prepare($sql2); 
    $stmt2->bind_param("i",$user_id); 
    $stm2->execute(); 
    $stmt->bind_result($col1,$col2,$col3); 


while($stmt2->fetch()){ 
echo "<div class='col-md-2'>"; 
echo $col1; // echo each iteration out, works just like $result->fetch_assoc() 
echo $col2; // equivalent of $row['col2']; but in prepared statement style because you're binding the rows 
echo $col1." plus ".$col2; 

echo "</div>"; 
} 
$stm2->close(); // close stmt 
$db->close(); // close connection 
?> 
関連する問題