Недостаточно памяти (выделено 50855936) (попытался выделить 50331646 байт)

У меня есть этот запрос:

$start = 0;
$number_of_posts = 10;

 $sql = $db -> prepare("
            SELECT  U.username, U.offer_photo, F.activities, A.id_offer, A.offer, A.role, A.content, A.date_post, A.limit, B.type_offer, C.local  
            FROM  type_offer B, local C, offer A
            INNER JOIN users U
            ON U.id_user = A.company_users_id_user1
            INNER JOIN company F
            ON F.users_id_user = A.company_users_id_user1   
            WHERE state = 0 
            AND
            A.type_offer_id_type_offer = B.id_type_offer 
            AND
            A.local_id_local = C.id_local
            ORDER BY date_post 
            DESC LIMIT ?, ?
            ");
        $sql -> bind_param('ii',$start, $number_of_posts);
        $sql -> execute();
        $sql -> bind_result($username, $offer_photo, $actividades, $id_oferta, $oferta, $cargo, $conteudo, $data_post, $data_limite, $tipo_oferta, $local); //problem here
            $sql->fetch();
            $sql-close;

И я имею memory_limit: 256M в phpinfo(); Однако я все еще получаю проблемы с памятью. Я уже пробовал этот код без успеха:

set_time_limit(0);
ini_set('memory_limit', '2000M');

Итак, мой вопрос, запрос может быть оптимизирован, или как я могу увеличить память? У меня нет доступа к php.ini, но я думаю, что 256 МБ должно быть достаточно, поэтому, возможно, проблема в запросе.

1 ответ

Является ли u.offer_photo полем с блобами? Если это так, я бы предложил переписать логику, чтобы вы не извлекали данные больших двоичных объектов, пока не отобразите их.

Даже если вы можете обойти ограничение памяти за счет увеличения выделения ресурсов, использование антиизъявления в памяти является слишком антисоциальным и ломким, поскольку увеличение размера базы данных в будущем, скорее всего, приведет к поломке системы.

Другие вопросы по тегам