Синтаксическая ошибка MySQL - около 1 в строке 1

При запуске моего PHP-скрипта он продолжает выдавать ошибку

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1' at line 1

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

    if($status === 1){
        $sqlQ = mysql_query("UPDATE tablename SET status=1 WHERE steam64='$id'");

        if(!mysql_query($sqlQ, $con)){
            die('Error: ' . mysql_error());
        }
    }else if($status !== 1){
        $sqlQ = mysql_query("UPDATE tablename SET status=2 WHERE steam64='$id'");

        if(!mysql_query($sqlQ, $con)){
            die('Error: ' . mysql_error());
        }
    }

Что меня действительно смущает, так это строчка 1 часть.

5 ответов

Решение

Вы нарушаете принцип СУХОГО. Почему не что-то вроде...

$statusValue = ($status === 1) ? 1 : 2;
$sqlQuery = mysql_query("UPDATE `14d2_group` SET `status` = $statusValue WHERE `steam64` = '$id'"):

ОБНОВЛЕНИЕ 2: Похоже, что есть необходимость в дополнительных разъяснениях.

Функция mysql_query не только создает запрос: она фактически отправляет MySQL - и возвращает результат. В случае UPDATE он вернет FALSE, если запрос не удался. Вот почему вы не должны вызывать mysql_query дважды, как вы это делали в исходном примере.

Вы можете проверить, сколько строк было обновлено с помощью функции mysql_affered_rows.

ОБНОВЛЕНИЕ 3: наконец получить его.) По этой причине появилась ошибка: вы пытались вызвать mysql_query с результатом последнего запроса на обновление. Который, как TRUE, преобразовал в String, просто "1".)

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

Что вы, вероятно, хотели сделать, это:

if($status === 1){
    $sqlQ = mysql_query("UPDATE tablename SET status=1 WHERE steam64='$id'");

    if (!$sqlQ) {
        die('Error: ' . mysql_error());
    }
}
else {// no need for your if-statement here because it would always be true
    $sqlQ = mysql_query("UPDATE tablename SET status=2 WHERE steam64='$id'");

    if(!$sqlQ){
        die('Error: ' . mysql_error());
    }
}

"Строка 1" соответствует строке 1 запроса, а не вызывающему ее сценарию. Чтобы добавить строку скрипта, вызывающего его, используйте:

die('Error: ' . mysql_error() . ' in ' . $_SERVER['PHP_SELF'] . ' on line ' . __LINE__ );

Что касается запроса, я действительно не вижу ничего выскакивающего на меня. Единственное предложение, которое у меня есть сейчас, - это всегда заключать имена полей в обратные метки, на случай, если они являются ключевыми словами (это также делает их более понятными для чтения).

Кроме того, ваш else if избыточно Если $status === 1 не бегает, то ясно $status !== 1 должно быть правдой.

Из-за типа литья, status=1 не проблема. Я предполагаю, что $id имеет некоторый пробрем. После изменения $id в другое безопасное значение (1, 'foo'...), затем проверьте, работает оно или нет.

Часть "строка 1" - это SQL, в которой говорится, что полученное сообщение содержало ошибку в строке 1 - первой строке команды, которую SQL пытался обработать.

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

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

Другие вопросы по тегам