2015-03-25 3 views
0

Я использую PostgreSQL в сочетании с PHP для проекта.Обновление поля столбца ТОЛЬКО Если Empty (PostgreSQL)

$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 …, и я не понимаю, почему.

ответ

0

Это потому, что функция возвращает ресурс, представляющий результат запроса. Он возвращает FALSE только в случае возникновения ошибки.

Попробуйте вместо этого использовать if (pg_affected_rows($result) == 0).

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

+0

Отлично, спасибо. – sdnyco

0

Согласно http://php.net/manual/en/function.pg-query.phppg_query возвращает FALSE только в том случае, если произошла ошибка, в противном случае ресурс возвращается, который отливают в булево всегда TRUE. Вы должны использовать pg_affected_rows($result), чтобы узнать, была ли какая-либо запись изменена из-за вашего запроса.

Смежные вопросы