我正在循环访问 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/