Нужно вытащить из базы данных все строки, имеющие нужное слово

Рейтинг: 0Ответов: 1Опубликовано: 12.05.2023

У меня есть база данных с таблицей, где содержится нужная информация. Мне необходимо достать из этой базы данных строки, где есть определённое слово, в моём случае это логин пользователя. Я добился того, что бы выдавалась одна, нужная мне, строка, но мне нужны вообще все строки имеющие нужный логин пользователя. При попытке запросить ещё раз нужные мне строки, выдаётся всё та же строка.

<?php
    $mysql = new mysqli('localhost', 'bob', '5555555559Ba', 'reg-users');
    $result = $mysql->query("SELECT * FROM `bron` WHERE `logins` LIKE '$login'"); // Получение нужной мне строки
    $result2 = $mysql->query("SELECT * FROM `bron` WHERE `logins` LIKE '$login'"); // Попытка получения второй строки, но безуспешно...
    $row = $result->fetch_assoc();
    $row2 = $result2->fetch_assoc();
    $time = array_slice($row, 1, 1); /* Тут я вытаскиваю из массива по одной переменной,
так как они мне нужны по отдельности, что бы удобно вставить в таблицу. */
    $pc = array_slice($row, 2, 1);
    $adres = array_slice($row, 3, 1);
    $date = array_slice($row, 4, 1);
    $_SESSION["time"]=implode("",$time); /* Единственный понятый мною метод, как вывести на экран
нужную мне переменную. */
    $_SESSION["pc"]=implode("",$pc);
    $_SESSION["adres"]=implode("",$adres);
    $_SESSION["date"]=implode("",$date);
?>

Ответы

▲ 1Принят

Вы неправильно используете функцию LIKE. Либо вы вообще не совсем понимаете как работать с SQL базами данных.

Предположим что у вас в переменной $login некая строка, по которой делается поиск.

Пусть для примера это будет строка example

Если у вас в таблице несколько завписей у которых в поле logins есть только значение example, то как правильно заметили в комментариях, нцжно в цикле получать данные для каждой строки. И в данном случае LIKE можно не использовать.

Т.е. будет как-то так

   $result = $mysql->query("SELECT * FROM `bron` WHERE `logins` = '$login'");     
   while($row = $result->fetch_assoc()) {
      print_r($row);
   }

Если же в поле logins у вас значения содержат строки в которых нужная строка example входит как подстрока, то тут уже нужно использовать LIKEб и использовать wildcards.

В этом случае запрос к базе будет, например, такой

$result = $mysql->query("SELECT * FROM `bron` WHERE `logins` LIKE '%$login%'");

Здесь знаки процента (%) это wildcards и они обозначают любое число символом. В данном случае любое число символов до искомой строки и любое число символов после.

А дальше чтобы обработать все строки точно так же цикл по всем строкам, которые вернул запрос.