我有一组数据库结果,其中一些列有空字段。我正在运行此查询:
SELECT * FROM `data` WHERE category = '$category' ORDER BY name
输出结果的PHP就是这个(简化版本):
while ($qValues = mysql_fetch_array($result)) {
if ($qValues["licence"] != "") {
$lice = 'Licence: ' . $qValues["licence"];
}
if ($qValues["publisher"] != "") {
$pub = 'Publisher: ' . $qValues["publisher"];
}
}
发生的事情是,如果前一行有发布者,但当前行没有发布者(非空,空字符串),则输出前一行的数据。
我不知道这是怎么回事,因为在我看来,mysql_fetch_array
将数据放在网格中,而while循环将其内部计数器逐行推进。如果该行包含空字符串,我不明白一行的数据如何渗入下一行。
这里发生了什么?
答案 0 :(得分:2)
每次循环时将$pub
重置为$pub = ""
...
while ($qValues = mysql_fetch_array($result)) {
$lice = "";
$pub = "";
if ($qValues["licence"] != "") {
$lice = 'Licence: ' . $qValues["licence"];
}
if ($qValues["publisher"] != "") {
$pub = 'Publisher: ' . $qValues["publisher"];
}
}
答案 1 :(得分:2)
由于您只在列具有值时设置变量,因此当列为空时,变量不会重置。这会导致您看到上一条记录中的值的问题。
每次都应设置变量,即使列为空白也是如此。您可以使用else
语句:
while ($qValues = mysql_fetch_array($result)) {
if ($qValues["licence"] != "") {
$lice = 'Licence: ' . $qValues["licence"];
} else {
// Set to blank so as not to keep value from last iteration
$lice = "";
}
if ($qValues["publisher"] != "") {
$pub = 'Publisher: ' . $qValues["publisher"];
} else {
// Set to blank so as not to keep value from last iteration
$pub = "";
}
答案 2 :(得分:1)
您没有在每次迭代中重置变量,因此您会看到旧值。要修复它,你可以这样做:
if ($qValues["licence"] != "") {
$lice = 'Licence: ' . $qValues["licence"];
} else {
$lice = '';
}
答案 3 :(得分:1)
您要将发布者和许可证的值分配给php变量。如果mysql结果包含空字符串,它仍将保留前一行的内容 每次循环结果时取消设置2个变量:
while ($qValues = mysql_fetch_array($result)) {
$lice = $pub = "";
if ($qValues["licence"] != "") {
$lice = 'Licence: ' . $qValues["licence"];
}
if ($qValues["publisher"] != "") {
$pub = 'Publisher: ' . $qValues["publisher"];
}
}