Для правильного вопроса надо знать половину ответа
Например, так:
SELECT `c`.`id`, `c`.`title`, `c`.`descr`, `i`.`images`
FROM `company` AS `c`
LEFT JOIN (
SELECT `company_id`, GROUP_CONCAT(`image`) AS `images`
FROM `company_images`
GROUP BY `id`
) AS `i` ON `i`.`company_id` = `c`.`id`
Для правильного вопроса надо знать половину ответа
Всё очень просто.
Использование func_overload меняет работу стандартных функций. Например, strlen после этого начинает возвращать длину строки не в байтах, а в символах. Соответственно, библиотеки, полагающиеся на стандартное поведение функций, будут работать некорректно. Поэтому func_overload запретили и, если вам нужны мультибайтовые строки, то надо напрямую использовать библиотеку mbstring.
Для правильного вопроса надо знать половину ответа
Workerman - это websocket.
Браузер подключается к серверу по ws:// и держит подключение открытым.
Любай сторона может послать по этому подключению данные другой стороне.
Для правильного вопроса надо знать половину ответа
Если без WebSocket, то только периодическим опросом сервера. Ставите в JS интервал и по его срабатыванию отправляете AJAX-запрос на сервер. Потом показываете ответ сервера пользователю.
Для правильного вопроса надо знать половину ответа
А зачем тут multi_query, если вызывается один запрос INSERT?
Перед циклом делаете prepare, привязываете параметры через bind_param. В цикле устанавливаете значения переменных и вызываете execute.
Для правильного вопроса надо знать половину ответа
С чего вы взяли, что multi_query - это асинхронный запрос? PHP вообще асинхронно не работает. Если у вас используется какая-то своя библиотека, то ответ надо искать в её доках.