#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