【发布时间】:2020-11-14 02:49:23
【问题描述】:
我正在使用以下内容来比较两个选择结果并显示它们之间的差异。
它按预期工作,但我无法同时包含相应的列名。
有人可以告诉我如何修改我的代码以获得所需的结果,如下例所示?
PHP:
$stmt = $conn->prepare("SELECT * FROM locations WHERE vstId = ?");
$stmt->bind_param("s", $vstId);
$stmt->execute();
$resultBefore = $stmt->get_result()->fetch_row();
$stmt->store_result();
$stmt->close();
// some event
$stmt = $conn->prepare("SELECT * FROM locations WHERE vstId = ?");
$stmt->bind_param("s", $vstId);
$stmt->execute();
$resultAfter = $stmt->get_result()->fetch_row();
$stmt->store_result();
$stmt->close();
$conn->close();
for($i=0; $i<count($resultAfter); $i++) {
if($resultAfter[$i] != $resultBefore[$i]) {
$diff.= '<tr><td>' . $resultBefore[$i] . '</td><td>' . $resultAfter[$i] . '</td></tr>';
}
}
echo '<table>' . $diff . '</table>';
当前结果:
<table>
<tr>
<td>10408</td><td>10407</td>
</tr>
<tr>
<td>168</td><td>167</td>
</tr>
</table>
期望的结果:
<table>
<tr>
<td>Column name that changed</td><td>10408</td><td>10407</td> // I am missing the 1st td
</tr>
<tr>
<td>Column name that changed</td><td>168</td><td>167</td> // I am missing the 1st td
</tr>
</table>
【问题讨论】:
-
只需使用
fetch_assoc而不是fetch_row并将for循环更改为foreach ($resultBefore as $key => $value)然后将现有循环中的$i替换为$key并在您想要的位置输出$key“更改的列名” -
我看到的唯一区别确实是缺少第一个 td。但它是纯文本?只需在 diff .= 之后添加它?
-
@Nick:非常感谢。会试试的。
-
@keewee279 本来打算回答你之前的问题,但你在我有机会之前就删除了它......
-
@keewee279,哈哈好吧,这更有意义 XD
标签: php arrays mysqli associative-array