我有一个 while 循环,它遍历从数据库查询返回的行。
查询
$sql = "SELECT t.barcode AS barcode, t.code, t.brand, t.name, t.cost, t.price, t.vat, SUM(n.stock) AS stock
FROM t
INNER JOIN c.am ON t.code=am.code
INNER JOIN n ON t.code=n.code WHERE (n.name='X' OR n.name='Y')
AND t.code IN ($in)
GROUP BY t.code, t.name, t.cost, t.salesprice, t.vat";
$result = $mysqli->query($sql);
echo "<table id='maintable'><tr><th>Barcode</th><th>Name</th><th>Brand</th></tr>";
while($row = $result->fetch_array()) {
if(empty($row['barcode'])){
$barcode = "none";
}
$barcode = $row['barcode'];
$name = $row['name'];
$brand = $row['brand'];
echo "<td>" . $barcode . "</td>";
echo "<td>" . $name . "</td>";
echo "<td>" . $brand . "</td>";
}
echo "</table>";
问题是如果条形码为空(不在数据库表中),则不会显示任何行。但是,如果有条形码,该行会显示。在我的示例中,我尝试检查 $row['barcode'] 是否为空以分配一个字符串,以便该行仍会显示但不成功。
在数据库中的表本身中,条形码有一个 Null 字段设置为 YES,Default Field 设置为 NULL 所以我也尝试过:
if(is_null($row['barcode'])) { ..... };
但是没有成功。
我在某处读到 empty 可以等同于:''、0 和 NULL 所以我认为它失败了,因为检查“empty”是否是错误的方法? 任何帮助表示赞赏。
最佳答案
if(empty($row['barcode'])){
$barcode = "none";
} else {
$barcode = $row['barcode'];
}
甚至更好:
$barcode = empty($row['barcode'])?"none":$row['barcode'];
所以你的代码将是:
while($row = $result->fetch_array()) {
$barcode = empty($row['barcode'])?"none":$row['barcode'];
$name = $row['name'];
$brand = $row['brand'];
echo "<td>" . $barcode . "</td>";
echo "<td>" . $name . "</td>";
echo "<td>" . $brand . "</td>";
}
更新 不确定您的数据库结构,但如果您需要一些空的 t.barcode
值,您的查询可能是这样的:
$sql = "SELECT
t.barcode AS barcode,
n.code,
t.brand, t.name, t.cost, t.price, t.vat,
SUM(n.stock) AS stock
FROM n
LEFT JOIN t
ON t.code=n.code
AND t.code IN ($in)
WHERE (n.name='X' OR n.name='Y')
GROUP BY n.code, t.name, t.cost, t.salesprice, t.vat";
而且我不明白 INNER JOIN c.am ON t.code=am.code
代表什么,也许你应该删除它。
关于当字段为空时,PHP 不返回任何行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29970589/