Этот случай не является редкостью: у вас есть две таблицы в отношениях от одного до многих.
Вы никогда не должны вставлять SQL-вызов в цикл, если вы можете его избежать, но есть решение быть сделал один вызов SQL или два.
Один вызов SQL может быть:
SELECT id, title, imageURL
FROM products LEFT JOIN productImages ON id=productid
Недостатком этого является то, что вы извлекаете заголовок несколько раз для каждого продукта, и это расточительно.
Используя два оператора SQL, вы можете загружать заголовки один раз для каждого продукта:
SELECT id, title FROM products
Результаты этого запроса могут быть сохранены в ассоциативном массиве - так, чтобы вы может искать заголовок для каждого идентификатора.
Второй запрос:
SELECT productid, imageURL FROM productImages ORDER BY productid, imageURL
Вы можете просмотреть результаты этого запроса, выплевывая заголовок по ходу.