#php #postgresql #pdo
Вопрос:
Я проверил следующий запрос непосредственно в базе данных, и он отлично работает:
UPDATE alertasdocumentos SET alert_disparada_diez = true WHERE alert_activa = true AND ((alert_fecha - 10) = (current_date)) AND alert_disparada_diez = false
Но при выполнении его с помощью PDO, используя следующий код, я получаю следующую ошибку:
Код:
$alert_activa = true; $alert_disparada_diez = false; $dias = 10; $alert = true; $sql1 = " UPDATE alertasdocumentos SET alert_disparada_diez = :alert WHERE alert_activa = :alert_activa AND ((alert_fecha - :dias) = (current_date)) AND alert_disparada_diez = :alert_disparada_diez "; $q1 = $pdo-gt;prepare($sql1); $q1-gt;bindParam(":alert", $alert, PDO::PARAM_BOOL); $q1-gt;bindParam(":alert_activa", $alert_activa, PDO::PARAM_BOOL); $q1-gt;bindParam(":alert_disparada_diez", $alert_disparada_diez, PDO::PARAM_BOOL); $q1-gt;bindParam(":dias", $dias, PDO::PARAM_INT); $q1-gt;execute();
Ошибка:
ERROR: SQLSTATE[42883]: Undefined function: 7 ERROR: operator does not exist: integer = date LINE 2: ... WHERE alert_activa = $2 AND ((alert_fecha - $3) = (current... ^ HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
Я пробовал использовать такой бросок:
(alert_fecha - :dias)::DATE = current_date TO_DATE(alert_fecha - :dias) = current_date CAST ((alert_fecha - :dias) AS DATE)
Но PDO в php продолжает распознавать это как ошибку приведения
ERROR: SQLSTATE[42846]: Cannot coerce: 7 ERROR: cannot cast type integer to date LINE 2: ... WHERE alert_activa = $2 AND (CAST ((ale...
Комментарии:
1. Для чего предназначен тип данных
alert_fecha
? Что произойдет, если вы это сделаетеselect alert_fecha from alertasdocumentos where = lt;some_idgt;
и посмотрите на стоимостьalert_fecha
в PDO? Добавьте ответы в качестве обновления к вашему вопросу. Я подозреваю, что PDO превращаетсяalert_fecha
в какое-то целочисленное значение эпохи, и этот минусdias
выходит в виде целого числа.