在查询结果或查询比较中包含列名

Include column names in query results or query comparison

我正在使用下面的方法比较两个 select 结果并显示它们之间的差异。
它按预期工作,但 我无法同时包含相应的列名称

谁能告诉我如何修改我的代码才能获得想要的结果,如下例所示?

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()。它将 return 一个关联数组。然后使用foreach循环和关联键循环数组并比较元素。

此外,删除 store_result(),您已经使用了 get_result()

固定代码如下所示:

$stmt = $conn->prepare("SELECT * FROM locations WHERE vstId = ?");
$stmt->bind_param("s", $vstId);
$stmt->execute();
$resultBefore = $stmt->get_result()->fetch_assoc();

// some event

$stmt = $conn->prepare("SELECT * FROM locations WHERE vstId = ?");
$stmt->bind_param("s", $vstId);
$stmt->execute();
$resultAfter = $stmt->get_result()->fetch_assoc();

foreach ($resultAfter as $col_name => $value) {
    if ($value !== $resultBefore[$col_name]) {
        $diff .= '<tr><td>' . htmlentities($col_name) . '</td><td>' . htmlentities($resultBefore[$col_name]) . '</td><td>' . htmlentities($value) . '</td></tr>';
    }
}
echo '<table>' . $diff . '</table>';