postgres/pdo 查询绑定值错误

Error with postgres/pdo query binding values

我正在 运行在 postgres 中执行以下查询:

SELECT (SUM(g.grade_days_late) - SUM(s.ex_late_days)) as used_late_days 
FROM grades as g 
    LEFT JOIN ( SELECT * FROM late_day_exceptions ) 
        as s on s.ex_rubric_id = g.rubric_id and s.ex_student_rcs=g.student_rcs 
WHERE g.student_rcs='?' AND g.status=1 AND g.rubric_id < ?

使用以下命令:

$statement = Database::$link->prepare($query);
$statement->execute($parameters);

$parameters 等于:

array (size=2)
  0 => string 'test' (length=7)
  1 => int 6

我收到以下错误:

PDOException: SQLSTATE[42P18]: Indeterminate datatype: 7 ERROR: could not determine data type of parameter 

我运行直接针对数据库的查询替换这两个?使用 $parameters 中的内容,它工作正常。如果我在第二个参数周围添加 ',查询 returns 什么都没有(但如果 运行 直接针对它插入值,仍然 returns 正确答案)。

我真的不知道这里发生了什么,也不知道为什么会出现错误。 (数据库是一个开放的 PDO 连接,没有问题)。

在您的查询中应该是 WHERE g.student_rcs= ?

SELECT (SUM(g.grade_days_late) - SUM(s.ex_late_days)) as used_late_days 
FROM grades as g 
    LEFT JOIN ( SELECT * FROM late_day_exceptions ) 
        as s on s.ex_rubric_id = g.rubric_id and s.ex_student_rcs=g.student_rcs 
WHERE g.student_rcs= ? AND g.status=1 AND g.rubric_id < ?

并像这样绑定值:

$statement = Database::$link->prepare($query);

$statement->bindValue(1, $parameters[0], PDO::PARAM_STR);
$statement->bindValue(2, $parameters[1], PDO::PARAM_INT);

$statement->execute();

数组的长度应与查询输出匹配。在你的情况下 used_late_days

function execute() 需要一个作为参数数组的参数。该数组的每个元素都被视为查询参数。所以现在 PDO "thinks" 你传递两个参数而你的查询只包含一个参数。