Foreach $ item未显示

时间:2012-05-11 02:30:33

标签: php mysql foreach

无法使用foreach输出mysql表的内容。正在为mysql表中的每个条目打印表(tr,td)等,但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 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

foreach需要可迭代的元素,即具有许多可以迭代的条目。这通常是一个数组,但也可以是实现Iterable接口的对象。

运行mysqli_query时获得的是资源。这只是MySQL结果集的一个句柄。数据还没有在PHP中,MySQL只是给你一个句柄说“好吧,我得到了你准备好的结果,随时可以得到它们”。调用mysqli_fetch_assoc从MySQL获取一个结果行。再次调用它会获得下一个,然后是下一个等等。这不是您可以迭代的过程,您可以继续调用mysqli_fetch_assoc,直到没有更多结果。

这就是foreach不起作用的原因。