@miss_allegory

Как правильно сделать такой поиск?

День добрый! У меня есть такой поиск:
$search   = _string($_POST['search_string']);
$account = $mysqli -> query('SELECT * FROM `users` WHERE `login` LIKE "'.$search.'%" ORDER BY `id` DESC');
while ( $row = $account -> fetch_assoc() ) {
    echo $row['login'].'<hr>';
}

Но как сделать правильно его для чата например? А то я делаю только так и получается что ищется кто первый попадется:
$search   = _string($_POST['search_string']);
$chat_result = $mysqli -> query('SELECT * FROM `chat` WHERE `user_id` IN (SELECT `id` FROM `users` WHERE `login` LIKE "'.$search.'%") ORDER BY `time` DESC ');
while ( $row = $chat_result-> fetch_assoc() ) {
    echo $row['user_id'].'<hr>';
}
  • Вопрос задан
  • 132 просмотра
Решения вопроса 1
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Учимся думать:
$search   = _string($_POST['search_string']);
$sql = '
SELECT * 
FROM `chat` 
WHERE `user_id` IN (
   SELECT `id` 
   FROM `users` 
   WHERE `login` LIKE "'.$search.'%"
) 
ORDER BY `time` 
DESC '; // делаем запрос отдельной строкой,
var_dump($sql);
//вставив в него переменную убеждаемся что там ерунда

//пишем нормально
$search   = $_POST['search_string'].'%';
$sql = '
SELECT * 
FROM `chat` 
WHERE `user_id` IN (
   SELECT `id` 
   FROM `users` 
   WHERE `login` LIKE ?
) 
ORDER BY `time` 
DESC '; 
$stmt = $mysqli->prepare($sql);
$stmt->bind_param('s', $search);
$chat_result = $stmt->execute();
while ( $row = $chat_result->fetch_assoc() ) {
    echo $row['user_id'].'<hr>';
}


ps: и нет смысла делать серч через пост запрос, лучше через гет, так поисковый запрос можно например переслать или скопировать и переиспользовать.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы