仅当列字段为空时更新列字段(PostgreSQL)


Update Column Field ONLY If Empty (PostgreSQL)

我将PostgreSQL与PHP结合用于一个项目。

$email = filter_var(trim($_POST["email"]), FILTER_SANITIZE_EMAIL);
$result = pg_query($dbconn, "UPDATE target.table
    SET activated = true, activated_timestamp = NOW() 
    WHERE (activated IS NULL)
    AND email = '$email'");
if (!$result) {
  echo "already activated or invalid email!";
  exit;
} else {
    echo "updated!";
}

我有包含用户的target.table,这些用户可以通过输入电子邮件地址激活他们的帐户(通过表单进行POST请求)。

在表中,每个用户(具有电子邮件地址的唯一标识符)都有两个与其关联的字段:activatedactivated_timestamp

上面的代码有效,并且只有当用户之前激活了而不是时才更新表。

但是$result仍然返回true。因此,在提交表单时,页面会返回updated!而不是already activated …,我不明白为什么。

这是因为函数返回一个表示查询结果的资源。只有在发生错误时才会返回FALSE。

请尝试使用if (pg_affected_rows($result) == 0)

http://php.net/manual/en/function.pg-affected-rows.php

根据http://php.net/manual/en/function.pg-query.phppg_query仅在出现错误的情况下返回FALSE,否则将返回强制转换为布尔值的资源始终为TRUE。您应该使用pg_affected_rows($result)来了解是否有任何记录因您的查询而更改。