2012-05-11 25 views
0

foreachを使用してmysqlテーブルの内容を出力する際に​​問題が発生しました。 mysqlテーブルの各エントリに対してテーブル(tr、td)などが出力されますが、$ itemをエコーするtdと/ tdタグの間には何もありません。

$sql = 'SELECT domain FROM domainsuggestions'; 
$domains = mysqli_query($link, $sql); // get domain suggestions from table 
<table> 
    <tr> 
     <td>Domain Suggestions</td> 
    </tr> 
    <?php foreach ($domains as $item): ?> 
    <tr> 
     <td><?php echo htmlspecialchars($item, ENT_QUOTES, 'UTF-8'); ?></td> 
    </tr> 
    <?php endforeach; ?> 
</table> 

答えて

2

MySQLを使用するためのあなたのロジックはかなりオフです。最初にクエリを実行し、結果のリソースIDを取得し、結果をループする必要があります。

$sql = 'SELECT domain FROM domainsuggestions'; 
$results= mysqli_query($link, $sql); // get domain suggestions from table 
<table> 
    <tr> 
     <td>Domain Suggestions</td> 
    </tr> 
    <?php while ($item = mysqli_fetch_assoc($results)): ?> 
    <tr> 
     <td><?php echo htmlspecialchars($item['domain '], ENT_QUOTES, 'UTF-8'); ?></td> 
    </tr> 
    <?php endwhile; ?> 
</table> 
+0

これをforeachでどのように行うことができますか? – Nick5a1

+0

@Nick 'foreach'は* iterable *要素を期待しています。まだデータベースからすべてのデータを取得していないため、データベースがありません。 mysqli_fetch_ *を呼び出すことで、一度に1行ずつしかデータを取得できません。なぜそれが 'foreach'である必要がありますか? – deceze

+0

私は "PHPとMySQLを使用して独自のデータベース駆動型Webサイトを構築する - 第4版"という本を手がかりにしています。これが教えられています。私はなぜそれが動作していないと私はこの使用法が使用され、今後の章で構築されるように移動する前にしたいと思います。 – Nick5a1

0

foreach反復可能要素、それができる反復を通じて多くのエントリを持っている、すなわち、何かを期待しています。これは通常は配列ですが、Iterableインターフェイスを実装するオブジェクトでもあります。

mysqli_queryを実行すると、リソースが表示されます。これはMySQLの結果セットの単なるハンドルです。データはPHPではまだありません。MySQLはちょうどというハンドルを与えました。「大丈夫、あなたのために結果を得ました。いつでも必要なときに入手してください」mysqli_fetch_assocを呼び出すと、MySQLから結果行が1つ取得されます。それをもう一度呼び出すと、次の、そして次のようになります。これはプロセスではありませんを繰り返し、結果がなくなるまでmysqli_fetch_assocを呼び出すことができます。

だから、foreachは機能しません。

関連する問題