这个SQL代码有什么问题吗?我是从教程中得到的,但它返回以下错误消息
数据库查询失败:你有一个 SQL语法错误;检查 与您的MySQL对应的手册 用于正确语法的服务器版本 在第1行'LIMIT 1'附近使用
function get_subject_by_id($subject_id) {
global $connection;
$query = "SELECT * ";
$query .= "FROM subjects ";
$query .= "WHERE id=" . $subject_id ." ";
$query .= "LIMIT 1";
$result_set = mysql_query($query, $connection);
confirm_query($result_set);
// if no rows are returned, fetch array will return false
if ($subject = mysql_fetch_array($result_set)){
return $subject;
} else {
return NULL;
}
}
答案 0 :(得分:7)
最好回应查询,看看它是什么样的。
可能$subject_id
不包含任何值或无效值。如果$subject_id
是一个字符串,你应该将它转义(使用mysql_real_escape_string)和将它放在查询中的引号内。
[编辑]
你知道你也可以输入字符串,对吗?
// More readable
$query = "
SELECT *
FROM subjects
WHERE id = $subject_id
LIMIT 1";
答案 1 :(得分:2)
$query .= "where id=" . $page_id . " ";
需要放在单引号内。用
替换上述陈述 $query .= "where id='" . $page_id . "
'“;
答案 2 :(得分:1)
坦率地说,不可能用这段代码说出完全错误是什么,不知道在查询中用什么值代替变量。
除此之外,有问题的代码可能会受到SQL注入攻击。
如果我可以将其他建议放在一起,以确保此代码不会产生任何错误:
function get_subject_by_id($subject_id) {
global $connection;
$query = "SELECT * ";
$query .= "FROM subjects ";
$query .= "WHERE id='" . mysql_real_escape_string($subject_id) ."' ";
// note the quotes and escaping wrapper
$query .= "LIMIT 1";
$result_set = mysql_query($query, $connection);
confirm_query($result_set);
// if no rows are returned, fetch array will return false
if ($subject = mysql_fetch_array($result_set)) {
return $subject;
} else {
return NULL;
}
}
此外,现在使用全局变量是一种不好的做法,所以我认为你使用的例子已经过时了。
答案 3 :(得分:0)
答案 4 :(得分:0)
function get_subject_by_id($subject_id) {
global $connection;
$query = "SELECT * ";
$query .= "FROM subjects ";
$query .= "WHERE id='" . $subject_id ."' "; //You need single quotes
$query .= "LIMIT 1";
$result_set = mysql_query($query, $connection);
confirm_query($result_set);
// REMEMBER:
// if no rows are returned, fetch_array will return false
if ($subject = mysql_fetch_array($result_set)) {
return $subject;
} else {
return NULL;
}
}
$query .= "WHERE id='" . $subject_id ."' "; //work
$query .= "WHERE id=" . $subject_id ." "; //not work