在php中分配if语句中的var

时间:2011-07-06 16:33:12

标签: php mysql

下面的代码应该检查数据库中是否已经存在该名称,如果它已经存在,则设置一个布尔值。但即使名称不存在,它也会设置布尔值;我已经多次验证了这一点。所以我认为我的代码一定是错的。我理解下面这一行是为了查看

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;
  }
}

3 个答案:

答案 0 :(得分:0)

我开始写道你应该使用平等而不是平等,然后意识到我正在跳出结论。

如果数据存在,则mysql_fetch_assoc返回一个数组;如果没有行,则返回FALSE。我的预感是$ row永远不会被设置为FALSE。我会尝试调试$ row并检查没有找到名称时返回的值。如果它正在分配一个空数组,那么它仍将评估为真。

在if语句中使用相等性的逻辑是合理的。如果它等于FALSE,则不会运行if语句。

http://php.net/manual/en/function.mysql-fetch-assoc.php

答案 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;
        }
    }
}