Как исправить проблемы с приведениями с PDO php в базе данных postgresql

#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 выходит в виде целого числа.