【问题标题】:Update Column Field ONLY If Empty (PostgreSQL)仅在为空时更新列字段 (PostgreSQL)
【发布时间】:2015-03-25 15:35:37
【问题描述】:

我在一个项目中使用 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 包含可以通过输入他们的电子邮件地址来激活他们的帐户的用户(通过表单发布请求)。

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

上面的代码只在用户之前没有被激活时才更新表格。

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

【问题讨论】:

    标签: php database postgresql


    【解决方案1】:

    那是因为该函数返回代表查询结果的资源。如果发生错误,它只返回 FALSE。

    尝试改用if (pg_affected_rows($result) == 0)

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2019-02-20
        • 1970-01-01
        • 2017-11-05
        • 2021-11-11
        • 1970-01-01
        • 1970-01-01
        • 2010-12-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多