下面的代码应该检查数据库中是否已经存在该名称,如果它已经存在,则设置一个布尔值。但即使名称不存在,它也会设置布尔值;我已经多次验证了这一点。所以我认为我的代码一定是错的。我理解下面这一行是为了查看
if ($row = mysql_fetch_assoc($result))
我认为这一行正在检查是否有结果。如果找到结果,则条件计算结果为TRUE,因此$row
被分配。这是对的吗?
您是否看到代码有任何其他问题或者做得不好的事情?我怀疑包含mysql_query
的行,因为有时,当您搜索不在数据库表中的名称时,它仍会进入if
块。
$udid_mismatch = false;
$name_found = false;
$result = mysql_query("SELECT udid
FROM $table
WHERE name='$name'");
if($row = mysql_fetch_assoc($result)) {
$name_found = true;
if($row['udid'] != $udid) {
$udid_mismatch = true;
}
}
答案 0 :(得分:0)
我开始写道你应该使用平等而不是平等,然后意识到我正在跳出结论。
如果数据存在,则mysql_fetch_assoc返回一个数组;如果没有行,则返回FALSE。我的预感是$ row永远不会被设置为FALSE。我会尝试调试$ row并检查没有找到名称时返回的值。如果它正在分配一个空数组,那么它仍将评估为真。在if语句中使用相等性的逻辑是合理的。如果它等于FALSE,则不会运行if语句。
答案 1 :(得分:0)
if($row = mysql_fetch_assoc($result)) {
如果赋值的计算结果为true,则输入if语句(即不等于false / 0 / null)
您没有循环开始行,将IF更改为WHILE
if($row = mysql_fetch_assoc($result)) {
到
while($row = mysql_fetch_assoc($result)) {
答案 2 :(得分:0)
$udid_mismatch = $name_found = false;
$result = mysql_query("SELECT `udid `
FROM `$table `
WHERE `name` = '$name'");
if (mysql_num_rows($result) > 0) {
$name_found = true;
while ($row = mysql_fetch_assoc($result)) {
if ($row['udid'] != $udid) {
$udid_mismatch = true;
break;
}
}
}