php - 用于在 php 中提取 db 数据的嵌套 while 循环
问题描述
$sql = "SELECT * FROM mytable";
$Source = $conn->query($sql);
$Target= $Tconn->query($sql);
if ($Source->num_rows > 0) {
while($s_row = $Source->fetch_assoc()) {
while($t_row= $Target->fetch_assoc()) {
echo $s_row["id"]."<br>";
echo $t_row["id"]."<br>";
}
}
}
嗨,我正在尝试使用嵌套的 while 循环从 2 个不同的服务器回显数据库表数据。我能够连接并回显数据,但输出不是我所期望的。在上面的代码中,您可以看到有 2 个 while 循环,因此对于第一个 while 循环的每个值,必须执行第二个 while 循环,假设 $s_row 具有值 [1,2] 并且 $t_row 具有值 [10,20] 然后输出应该是 1 10 1 20 2 10 2 20 但目前,我得到的输出是 1 10 1 20。这意味着第二个 while 循环没有采用第一个循环的第二行值。
谁能帮我解决这个问题,谢谢。
解决方案
一旦到达末尾$Target
,任何将来对 fetch 的调用都将返回false
,因此内部循环将不会运行。
您需要回到结果的开头以再次处理它们。
if ($Source->num_rows > 0) {
while($s_row = $Source->fetch_assoc()) {
$Target->data_seek(0);
while($t_row= $Target->fetch_assoc()) {
echo $s_row["id"]."<br>";
echo $t_row["id"]."<br>";
}
}
}
除非返回的数据太多,否则将结果放在列表中并进行处理会更有效。
if ($Source->num_rows > 0) {
$Target_data = $Target->fetch_all(MYSQL_ASSOC);
while($s_row = $Source->fetch_assoc()) {
foreach ($Target_data as $t_row) {
echo $s_row["id"]."<br>";
echo $t_row["id"]."<br>";
}
}
}
推荐阅读
- arrays - 按 C/C++ 中的出现频率对数组进行排序
- c# - “UWP 类库 dll 中的 XamlParseException
- html - 无序列表(ul)内的css下拉菜单
- python - 使用分组列的邻接矩阵
- swift - 条形图在 swift 中显示 nil
- c++ - 如何修复错误 C2440: 'return' : cannot convert from 'int' to 'elem *'?
- python-3.x - 查找用户输入插入的 xml 中的元素
- kubernetes - 允许 Kubernetes 用户列表/获取命名空间
- elixir - 不使用 pheonix 时启用开发热重载的最佳方法是什么?
- html - 如果该图像上存在文本,如何在 html 页面中呈现时使图像上的文本可选?