php - fetch_assoc() 在循环中仅工作一次

标签 php mysqli

我正在循环访问 MySQL DB 中的 2 个表(使用 fetch_assoc())。我想在每次迭代中获取第一个表的当前 id 和第二个表的所有 id,但仅在第一次迭代时获取第二个表的 id。从第二次迭代开始,仅返回第一个表的当前 id。我想知道我做错了什么。

我已经尝试过 for Loops 并在这里查找了类似的问题,但没有一个真正有帮助。

<?php
$my_sqli = new mysqli('localhost', 'root', '', 'taskpro') or die(mysqli_error($my_sqli));
$data1 = $my_sqli->query("SELECT * FROM task_table") or die($my_sqli->error);
$data2 = $my_sqli->query("SELECT * FROM taskinfo") or die($my_sqli->error);

while ($row = $data1->fetch_assoc()) {
    echo "<br>";
    echo $row['id'];
    echo "<br>";

    while ($row2 = $data2->fetch_assoc()) {
        echo $row2['id'];
    } // end child loop

} // end parent loop

?>

这是我得到的结果

1

1234

2

3

4

5

6

7

8

9

10

最佳答案

最简单的做法是将 query2 中的所有值读取到数组中,然后在循环中输出数组的内容:

$my_sqli = new mysqli('localhost', 'root', '', 'taskpro') or die(mysqli_error($my_sqli));
$data1 = $my_sqli->query("SELECT * FROM task_table") or die($my_sqli->error);
$data2 = $my_sqli->query("SELECT * FROM taskinfo") or die($my_sqli->error);

$rows2 = $data2->fetch_all(MYSQLI_ASSOC);
while ($row = $data1->fetch_assoc()) {
    echo "<br>";
    echo $row['id'];
    echo "<br>";

    foreach ($rows2 as $row2) {
        echo $row2['id'];
    } // end child loop

} // end parent loop

如果由于某种原因您确实需要迭代外循环中的结果集,则可以使用 mysqli_data_seek重置指针:

while ($row = $data1->fetch_assoc()) {
    echo "<br>";
    echo $row['id'];
    echo "<br>";

    while ($row2 = $data2->fetch_assoc()) {
        echo $row2['id'];
    } // end child loop
    // reset $data2 result pointer
    $data2->data_seek(0);

} // end parent loop

关于php - fetch_assoc() 在循环中仅工作一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58642205/

相关文章:

php - 使用 WHILE,&&Operator (NOT USING JOIN) 从 mysql 检索多个查询

php - 回显更新值而不是旧值

php - mysqli_real_escape_string() 和 mysql_real_escape_string() 的区别

php - MySQLi 更新带引号等

php - 我可以在PHP中混合使用MySQL API吗?

php - 现金簿记录 库存系统

PHP - 推送通知

php - 如何使用PHP在Mysql中存储多维数组

PHP 编码问题读取文件 - ISO-8859-1 和 UTF-8 冲突

php - 将 php 中的多个值插入到匹配的名称/id 中