Это означает, что ошибка была в запросе.
По умолчанию mysqli не сигнализирует об ошибках в mysqli_query(). Чтобы заставить её делать это, надо перед коннектом написать волшебное слово:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
Это самый простой, но менее удобный способ, поскольку в сообщении об ошибке нам желательно сразу увидеть и запрос с ошибкой. Поэтому лушче проверять результат запроса, и порождать ошибку РНР с ошибкой mysql и запросом.
Ошибка в запросе может быть вызвана чем угодно. В частности - мусором, переданным в запрос.
Именно поэтому данные для запроса должны форматироваться только перед непосредственным выполнением запроса, а не где-то ещё!
Поэтому вместо того, чтобы продолжать писать на mysqli ТОТ ЖЕ САМЫЙ УРОДЛИВЫЙ ГОВНОКОДО, что и на mysql, надо использовать более интеллектуальный подход, который будет обеспечивать
как форматирование, так и обработку ошибок:function get_products($db, $ids, $start_pos, $perpage){
if($ids){
$query = "SELECT * FROM sdvd_products WHERE parent IN($a) LIMIT ?i, ?i";
} else {
$query = "SELECT * FROM sdvd_products LIMIT ?i, ?i";
}
return $db->getAll($query, $ids, $start_pos, $perpage);
}