首页 > 解决方案 > 如何更正 postgresql 数据库中 PDO php 的强制转换问题

问题描述

我直接在数据库中对以下查询进行了测试,效果很好:

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->prepare($sql1);
$q1->bindParam(":alert", $alert, PDO::PARAM_BOOL);
$q1->bindParam(":alert_activa", $alert_activa, PDO::PARAM_BOOL);
$q1->bindParam(":alert_disparada_diez", $alert_disparada_diez, PDO::PARAM_BOOL);
$q1->bindParam(":dias", $dias, PDO::PARAM_INT);
$q1->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)

但是 php 中的 PDO 一直将其识别为强制转换错误

ERROR: SQLSTATE[42846]: Cannot coerce: 7 ERROR:  cannot cast type integer to date
LINE 2: ...                     WHERE alert_activa = $2 AND (CAST ((ale...

标签: phppostgresqlpdo

解决方案


推荐阅读