Синтаксическая ошибка 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 знал, что передается переменная.
Изменить: ОК, другое решение может быть правильным. Мы оба сделали разные предположения о вашей структуре данных, и я думаю, что он лучше. Попробуйте сначала.