Ещё несколько оптимизаций:
1) Вынести обработку строки в отдельную функцию, вызывать её в цикле (тогда локальные переменные, созданные там, не будут выживать между вызовами функции, что в некоторых случаях может предотвратить утечку памяти)
2)
$sql = "SELECT searchArticle and brand from `dk_prices` where searchArticle = ?s and brand = ?s";
$result = $db->query($sql, $searchArticle, $brand);
if(mysqli_num_rows($result) > 0) {
Вы здесь получаете только кол-во строк, гораздо логичнее сразу запрашивать только количество
$sql = "SELECT COUNT(*) from `dk_prices` where searchArticle = ?s and brand = ?s";
3) Заодно не вижу по коду, чтобы $result как-нибудь явно освобождался. Поидее должен, конечно, срабатывать деструктор при присвоении нового указателя на объект, но как устроен ваш класс для работы с БД - неизвестно, может быть там вообще никакого деструктора нет и результаты накапливаются бесконечно, освобождаясь только после окончания работы скрипта.