我正在编写教程并完全复制下面的代码,但是我收到以下错误消息。任何想法语法有什么问题?
数据库查询失败:你有一个 SQL语法错误;检查 与您的MySQL对应的手册 用于正确语法的服务器版本 在第2行“BY位置ASC”附近使用
function get_pages_for_subject($subject_id, $public = true) {
global $connection;
$query = "SELECT * FROM pages WHERE subject_id = .$subject_id.";
if ($public) {
$query .= "AND visible = 1 ";
}
$query .= "ORDER BY position ASC";
$page_set = mysql_query($query, $connection);
confirm_query($page_set);
return $page_set;
}
答案 0 :(得分:0)
你可能已经从中抽象出了PHP。
打印$query
会显示$subject_id
可能不是您认为的那样。
另外,您的SQL注入预防在哪里?
答案 1 :(得分:0)
请强制$subject_id
是整数值或用引号将其包装出来:
$subject_id = (int)$subject_id; before your $query .= "WHERE subject_id = {$subject_id} ";
或
$query .= "WHERE subject_id = '{$subject_id}' ";
这应该有效。问题是$subject_id
值会破坏您的查询。
小建议:在这里实施一些安全性,你应该防止SQL注入方案。
答案 2 :(得分:0)
您应该反引所有字段名称。像
`visible` = 1
ORDER BY `position`
等等,确保没有任何与保留的MySQL字冲突(我正在考虑“位置”这是一个字符串函数)。