У вас есть ошибка в вашем синтаксисе SQL - синтаксис для использования рядом с 'WHERE userId =' 6 '' в строке 1

0

Я получаю ошибку

У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии сервера MariaDB, для правильного синтаксиса для использования рядом с 'WHERE userId =' 6 '' в строке 1

При запросе этих строк:

$query = 'SELECT * FROM post ORDER BY created DESC ';
    $query .= 'WHERE userId = \'' . mysqli_real_escape_string($db, $userId) . '\'';

Не удается найти решение. Нужно ли менять столбцы для db или синтаксиса?

  • 2
    Вы должны поместить WHERE перед предложением ORDER BY
  • 0
    Вы должны использовать порядок в конце запроса, и запрос должен быть $query = 'SELECT * FROM post '; $query .= 'WHERE userId = \'' . mysqli_real_escape_string($db, $userId) . '\''; $query .= ' ORDER BY created DESC' ;
Показать ещё 3 комментария
Теги:

4 ответа

1

Ошибка из-за использования WHERE после ORDER BY. Правильный запрос должен быть таким:

$query = 'SELECT * FROM post WHERE userId = "' . mysqli_real_escape_string($db, $userId) . '" ORDER BY created DESC';
1

Несколько ошибок с вашим запросом:

$query = 'SELECT * FROM post ORDER BY created DESC ';
  1. ORDER BY следует после WHERE в потоке синтаксиса, поэтому указание WHERE после ORDER BY является синтаксической ошибкой (то, что вы получаете)

    $ query. = 'WHERE userId = \' '. mysqli_real_escape_string ($ db, $ userId). '\' ';

  2. Фактически вы не используете параметризованные запросы. Познакомиться с ними и использовать их, mysqli_real_escape_string - это только бандайда для использования правильных параметров.

  3. Вы сравниваете идентификатор пользователя (предположительно целое число) с использованием нотации строк. Это бессмысленно и может привести к нежелательным результатам. Целые числа не обязательно должны быть заключены в кавычки в SQL.

"Восстановленный" код для вашего запроса (по-прежнему смотрите, как параметризовать):

$query = 'SELECT * FROM post WHERE userID = '.mysqli_real_escape_string($db, $userId).' ORDER BY created DESC';
1

используйте ORDER BY после WHERE. в запросе

<?php
$query = 'SELECT * FROM post';
$query .= ' WHERE userId = "' . mysqli_real_escape_string($db, $userId) . '"';
$query .= ' ORDER BY created DESC';
?>
0

Вы даже пытались повторить запрос? Вы не увидите места между DESCWHERE.

Переместите ORDER BY до конца.

SELECT whatever FROM wherever WHERE whatever ORDER BY whatever

Кроме того, прочитайте в PDO и подготовленных инструкциях, что код уязвим для SQL-инъекции. https://phpdelusions.net/pdo

Ещё вопросы

Сообщество Overcoder
Наверх
Меню