Почему возвращается только первое совпадение при использование оператора LIKE в mysql?

Собственно, суть вот в чем: есть sql запрос, есть база данных.
Сам запрос выглядит следующим образом:
SELECT `service` FROM `service_synonyms` WHERE `synonym` LIKE '%$query%'

Выборка данных происходит так (используется mysqli):
$sql = "SELECT `service` FROM `service_synonyms` WHERE `synonym` LIKE '%$query%' ";
$result = $this->_dbconn->query($sql)->fetch_array(MYSQLI_ASSOC);

При использовании объектно-ориентированной модели PHP, возвращается первое совпадение и всё. Но, если делать процедурно, то возвращает все совпадения.
Как быть и что я делаю не так?
  • Вопрос задан
  • 3144 просмотра
Решения вопроса 1
svd71
@svd71
Потому что имеются две функции: fetch и fetchAll. После первой нужно перемещаться по курсору с помощью функции next. Вторая же вернет все строки из курсора за одно обращерие.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
Суть, на самом деле, в том, что

Первое: портируя свой код с "процедурной модели" на "объектно-ориентированную" аффтар умудрился не заметить цикл, который был в первой, но испарился во второй. Но виновата оказалась модель ООП РНР.

Второе и самое главное: портируя свой старый говнокод с mysql_* аффтар осилил только добавление буковки i и стрелочек, всё остальное оставив как есть. Получив в итоге ровно тот же самый говнокод, что и раньше.

Для справки:
Смысл перехода с mysql на mysqli не в том, чтобы добавить палочку с точечкой. А в том, чтобы использовать подготовленные выражения.
Смысл ООП не в том, чтобы писать палочки с угловой скобочкой. А в том, чтобы объект инкапуслировал внутри себя всю работу по обработке данных, возвращая сразу желаемый результат. В итоге код, реально использующий ООП, должен выглядеть как-то так:
$sql = "SELECT `service` FROM `service_synonyms` WHERE `synonym` LIKE ?";
$result = $this->_dbconn->getAll($sql, "%$query%");
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы