用 php table 中的 "String" 替换 MySQL 查询的 Null 输出

Replacing the Null output of a MySQL query with a "String" in a php table

根据我在 SO 中进行的研究,这是唯一与我需要的问题类似的其他问题,但恐怕我没有帮助我 (How to replace null results in sql query result table with a string?)。

我有一个 table 可以打印患者的病史,table 细胞是从数据库中恢复的。

部分代码如下:

echo "<tr>";
echo "<th>MRI Onset Localisation</th>";
echo "<th>CNS MRI Lesions Y/N </th>";
echo "<th>CNS MRI Lesions No.</th>";
echo "<th>CNS MRI Location</th>";
echo "<th>Person Signing the form</th>";
echo "<th>Documented at</th>";
echo "</tr>";
echo "<tr>";
echo "<td>" . $row['Onsetlocalisation'] . "</td>";
echo "<td class='tdclass exempt'>" . $row['smoker'] . '<br>' . $row['cigars'] . '<br>' . $row['cigardate'] . "</td>";
echo "<td>" . $row['onsetsymptoms'] . "</td>";
echo "<td class='tdclass exempt'>" . $row['MRIonsetlocalisation'] . "</td>";
echo "<td>" . $row['MRIenhancing'] . "</td>";
echo "<td class='tdclass exempt'>" . $row['MRInum'] . "</td>";
echo "<td>" . $row['MRIenhancinglocation'] . "</td>";
echo "<td class='tdclass exempt'>" . $row['signer'] . "</td>";
echo "<td>" . $row['reg_date'] . "</td>";
echo "</tr>";

并且 MySQL 查询 returns 那些字段是

$sql = "SELECT * FROM tblName WHERE somefield = $somevar";

问题是... 其中一些字段允许使用 NULL 作为值,但对于应用程序的前端,我想要 table 包含 NULL 值的单元格以打印标准字符串,例如“N/A”或“Empty”,但我需要它在代码的 php table 部分内完成,或者所以我觉得...

我发现了很多关于用 MySQL 查询中的字符串替换 NULL 的问题,但我不关心这个,因为查询不会出现在 [=43 之外的最终用户处=].

我尝试通过以下方式实现合并运算符,但没有显示任何内容:

echo "<td class='tdclass exempt'>" . $row['MRInum'] ?? "N/A" . "</td>";

绝对欢迎任何帮助。

您需要将表达式放在方括号中以明确哪些部分应该由空合并运算符求值:

echo "<td class='tdclass exempt'>" . ($row['MRInum'] ?? "N/A") . "</td>";

如果您不这样做,它会认为 "<td class='tdclass exempt'>" 是要检查是否存在的文本的一部分 - 这意味着它始终 returns 为真,因为该硬编码文本始终存在。

您可以通过两种方式执行此操作。

来自SQL:

COALESCE(fieldName, 'N/A') AS fieldName

会将 NULL 替换为 'N/A'。

否则,当您获取该行时,

$row = $stmt->fetch(PDO::FETCH_OBJECT);

您可以审核它:

$replacements = [
    'MRI_Data' => 'N/A',
    'MRI_Type' => [
        '001' => 'Single Scan',
        '002' => 'Multi Scan',
        '003' => 'Pulsed',
        '(null)' => 'N/A',
    ],
];


foreach ($row as $key => $value) {
    if (array_key_exists($key, $replacements)) {
        if (is_array($replacement[$key])) {
            if (empty($value)) {
                $value = '(null)';
            }
            if (array_key_exists($value, $replacement[$key])) {
                $row[$key] = $replacement[$key][$value];
            }
        } else {
            if (empty($value)) {
                $row[$key] = $replacement[$key];
            }
        }
    }
}