我将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请求)。
在表中,每个用户(具有电子邮件地址的唯一标识符)都有两个与其关联的字段:activated
和activated_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)
来了解是否有任何记录因您的查询而更改。