【发布时间】:2012-10-27 18:22:19
【问题描述】:
我有这个查询:
$query = $db->query("SELECT
posts.post_topic_id,
posts.post_content,
posts.post_id,
posts.post_date,
posts.post_by,
posts.post_votes_total,
posts.post_suggested_amount,
posts.post_accepted,
posts.post_last_edited,
posts.post_edit_sum,
users.user_id,
users.username
FROM
posts
JOIN
users
ON
posts.post_by = users.user_id
WHERE
posts.post_topic_id = :topic_id
ORDER BY
:sort
LIMIT :start , :per_page
");
$query->bindParam(':topic_id', $topic_id, PDO::PARAM_INT);
$query->bindParam(':sort', $sort, PDO::PARAM_STR);
$query->bindParam(':start', $start, PDO::PARAM_INT);
$query->bindParam(':per_page', $per_page, PDO::PARAM_INT);
$query->execute();
但它不会执行,而是给我和错误:
带有消息“SQLSTATE[42000] 的异常“PDOException”:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 C:\htdocs\lr\topic.php:577 中的 ':topic_id ORDER BY posts.post_id ASC ' at line 25' 附近使用正确的语法:\htdocs\lr\topic.php:577 堆栈跟踪:#0 C :\htdocs\lr\topic.php(577): PDO->query('SELECT???? ...') #1 {main}
如果我不准备语句,而我使用普通变量,则查询执行得很好。
我的错误是什么?
【问题讨论】:
-
另一个常见问题:确保
$start和$per_page和$topic_id包含实际的整数值。使用var_dump()进行验证。 -
near ':topic_id ORDER BY posts.post_id ASC ' at line 25'看起来您发布的查询与给出错误的查询不完全相同? (你这里有“:topic_id ORDER BY :sort LIMIT”) -
Jup,即便如此,也不使用
prepare。这首先需要解决。
标签: php pdo prepared-statement