PHP SQL数据库查询错误消息

时间:2011-02-18 09:24:24

标签: php database

这个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;

    }
    }

5 个答案:

答案 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