postgres / pdo查询绑定值出错

时间:2015-04-08 04:32:56

标签: php sql database postgresql pdo

我在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 $2

我直接对数据库运行查询替换这两个?与$参数中的东西,它工作正常。如果我在第二个参数周围添加',则查询不返回任何内容(如果插入的值直接针对它运行,仍会返回正确的答案)。

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

2 个答案:

答案 0 :(得分:2)

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

function execute()期望单个参数是一个参数数组。该数组的每个元素都被视为查询参数。所以现在PDO&#34;认为&#34;当您的查询只包含一个参数时传递两个参数。

答案 1 :(得分:1)

您的查询中应该是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();