我在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连接,没有问题)。
答案 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();