Foreach $item is not displaying


Foreach $item is not displaying

使用 foreach 输出 mysql 表的内容时遇到问题。正在为 mysql 表中的每个条目打印表(tr、td)等,但 td 和/td 标记之间没有任何内容,每个$item都应该被回显。

$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>

你使用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>

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

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

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