Сообщение об ошибке запроса базы данных PHP SQL - PullRequest
2 голосов
/ 18 февраля 2011

Что-то не так с этим кодом SQL? Я получил его из учебника, но он возвращает следующее сообщение об ошибке

Ошибка запроса к базе данных: у вас есть ошибка в вашем синтаксисе SQL; проверить руководство, которое соответствует вашему MySQL версия сервера для правильного синтаксиса используйте около 'LIMIT 1' в строке 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 ]

7 голосов
/ 18 февраля 2011

Лучше всего повторить запрос и посмотреть, как он выглядит.

Вероятно, $subject_id не содержит значения или недопустимого значения.Если $subject_id является строкой, вы должны экранировать ее (используя mysql_real_escape_string) и поместить ее в кавычки в запросе.

[Редактировать]

Вы знаете, что можетеположить входит в строки тоже, верно?

// More readable
$query = "
  SELECT *
  FROM subjects
  WHERE id = $subject_id
  LIMIT 1";
2 голосов
/ 28 сентября 2012
$query .= "where id=" . $page_id . " ";

Необходимо заключить в одинарные кавычки. Заменить вышеприведенное утверждение на

$query .= "where id='" . $page_id . " '";

1 голос
/ 18 февраля 2011

Честно говоря, невозможно сказать, что именно точно неправильно с этим кодом, не зная, какие значения подставляются в запросе вместо переменных.

Кроме того, код ввопрос может быть предметом атак с использованием 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;
    }
}

Кроме того, использование глобальных переменныхв наши дни это плохая практика, поэтому я полагаю, что пример, который вы используете, устарел.

0 голосов
/ 07 апреля 2013
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
0 голосов
/ 18 февраля 2011

Попробуйте использовать mysql_real_escape_string ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...