Порядок выбора запроса, не работающий в подготовленном операторе

#php #mysql #sql #select #prepared-statement

#php #mysql #sql #выберите #подготовленный оператор

Вопрос:

Я создал подготовленный запрос выбора, и кажется, что запрос не отвечает на DESC или у меня bind_param неправильная структура. Я пытаюсь отобразить последнее id изображение идентификатора пользователя. Отображается изображение пользователя, но это первое изображение идентификатора, которое у них есть. Я попытался сделать ASC , и это было то же самое.

Правильно ли я это делаю?

 $sql = "
  SELECT *
  FROM profile_img
  WHERE user_id = ?
  ORDER BY ? DESC LIMIT 1
  ";
  if ($stmt = $con->prepare($sql)) {
        $stmt->bind_param("ss", $user_id, `id`);
        $stmt->execute();
        if (!$stmt->errno) {
            // Handle error here
        }
        $stmt->bind_result($id, $user_id, $profilePic);

        $pics = array();
        while ($stmt->fetch()) {
            $pics[] = $profilePic;
        }

        echo '<img id="home-profile-pic" src=" '.$profilePic.'">';
  }
  

Ответ №1:

Я не думаю, что вы можете :

  • Используйте заполнители в предложении order by
  • Привязать имена столбцов : вы можете привязывать только значения — или переменные, и вводить их значения в подготовленный оператор.

You can use number instead of field name in the 'order by' clause

Комментарии:

1. Это сделало свое дело. Я удалил привязанное имя столбца и заменил им заполнитель. Спасибо!

Ответ №2:

Почему вы поставили? после инструкции «order by»?

Ваш заказ по должен ссылаться либо на идентификатор вашей таблицы «profile_img», либо на любое поле метки времени в этой таблице…

например $sql = "
SELECT *
FROM profile_img
WHERE user_id = ?
ORDER BY id DESC LIMIT 1
";

здесь замените идентификатор (я предполагаю это имя) именем поля первичного ключа таблицы profile_image

или

     $sql = "
 SELECT *
 FROM profile_img
 WHERE user_id = ?
 ORDER BY created_on DESC LIMIT 1
";
  

здесь created_on (который я также предположил) может быть заменен любым полем метки времени, если оно есть в таблице profile_img