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" 你传递两个参数而你的查询只包含一个参数。
我正在 运行在 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" 你传递两个参数而你的查询只包含一个参数。