2016-06-28 2 views
0

Я не понимаю, почему я получаю следующее сообщение об ошибке:памяти в CI mysql_result

Fatal error: Out of memory (allocated 10747904) (tried to allocate 93 bytes) in /home/project/public_html/system/database/drivers/mysql/mysql_result.php on line 167 

phpinfo() Подробнее

   localvalue mastervalue 
memory_limit 4028M  4028M 

SQL

SELECT 
    p.*,l.*,u.*,ct.*,t.*,pc.* 
FROM 
    tbl_Product AS p 
    JOIN tbl_DistributorLocationId AS l ON p.fk_LocationId = l.pk_DistributorLocationId 
    JOIN tbl_Manufacturer AS m ON p.fk_Manufacturer = m.pk_ManufacturerId 
    LEFT JOIN tbl_Color AS c ON p.fk_Colors = c.pk_ColorId 
    LEFT JOIN tbl_Texture AS t ON p.fk_Texture = t.pk_TextureId 
    LEFT JOIN tbl_ProductLine AS pl ON p.fk_ProductLine = pl.pk_ProductLineId 
    LEFT JOIN tbl_States AS s ON l.fk_StateId = s.pk_StateId 
    LEFT JOIN tbl_Users AS u ON l.fk_UserId = u.pk_UserId 
    LEFT JOIN tbl_UserType AS ut ON u.fk_UserTypeId = ut.pk_UserTypeId 
    LEFT JOIN tbl_ProductCategories AS pc ON p.fk_CategoryId = pc.pk_CategoryId 
    LEFT JOIN tbl_CategoryType AS ct ON pc.fk_CategoryTypeId = ct.pk_CategoryTypeId 
where 
    1 = 1 
    AND p.boolean_status = 1 
ORDER BY 
    LOCATE('', varchar_Title), 
    LOCATE('', varchar_ProductLineText), 
    LOCATE('', varchar_ColorName), 
    LOCATE('', varchar_TextureName), 
    LOCATE('', text_Description), 
    LOCATE('', varchar_CategoryName), 
    LOCATE('', varchar_CategoryTypeName) 

Результат от PHPMyAdmin

39706 total, Query took 1.2748 seconds. 
+0

Я сомневаюсь, что это утечка памяти, как правило, когда вы бежите из памяти при попытке выделить небольшое количество указывает на бесконечный цикл где-то в ваш код .. Просто потому, что часть db закончилась из памяти, не означает, что именно там была реальная проблема, например, вы могли бы вытащить одну и ту же запись в миллиард раз. – ArtisticPhoenix

+0

Вы не можете получить очень большие данные по запросу ... использовать цикл while для извлечения и очистки памяти – Sundar

+0

Нам действительно нужно увидеть больше кода, чтобы понять, что это такое, @Sundar имеет хорошую точку, но невозможно узнать без дополнительной информации. 4 ГБ - это хороший кусок памяти, поэтому потребуется много строк или строк с большим объемом данных, например, с изображениями BLOB, чтобы не хватать памяти. – ArtisticPhoenix

ответ

0

Вы можете выполнить одно из следующих действий:

  1. Если у вас есть доступ к файлу php.ini, измените строку в php.ini

    memory_limit = 128M ;

  2. Если у вас нет доступа к php.ini попробуйте добавить это к .htaccess файл:

    php_value memory_limit 128M

+0

Я уже пробовал это. – chudasamachirag

0

Извлекать только записи, которые вам нужны в вас приложения не все забрать все данные из таблиц.

Перед

SELECT 
    p.*,l.*,u.*,ct.*,t.*,pc.* 
FROM 
    tbl_Product AS p 
    JOIN tbl_DistributorLocationId AS l ON p.fk_LocationId = l.pk_DistributorLocationId 
    JOIN tbl_Manufacturer AS m ON p.fk_Manufacturer = m.pk_ManufacturerId 
    LEFT JOIN tbl_Color AS c ON p.fk_Colors = c.pk_ColorId 
    LEFT JOIN tbl_Texture AS t ON p.fk_Texture = t.pk_TextureId 
    LEFT JOIN tbl_ProductLine AS pl ON p.fk_ProductLine = pl.pk_ProductLineId 
    LEFT JOIN tbl_States AS s ON l.fk_StateId = s.pk_StateId 
    LEFT JOIN tbl_Users AS u ON l.fk_UserId = u.pk_UserId 
    LEFT JOIN tbl_UserType AS ut ON u.fk_UserTypeId = ut.pk_UserTypeId 
    LEFT JOIN tbl_ProductCategories AS pc ON p.fk_CategoryId = pc.pk_CategoryId 
    LEFT JOIN tbl_CategoryType AS ct ON pc.fk_CategoryTypeId = ct.pk_CategoryTypeId 
where 
    1 = 1 
    AND p.boolean_status = 1 
ORDER BY 
    LOCATE('', varchar_Title), 
    LOCATE('', varchar_ProductLineText), 
    LOCATE('', varchar_ColorName), 
    LOCATE('', varchar_TextureName), 
    LOCATE('', text_Description), 
    LOCATE('', varchar_CategoryName), 
    LOCATE('', varchar_CategoryTypeName) 

После

SELECT 
    pc.pk_CategoryId, 
    pc.varchar_CategoryName, 
    c.pk_ColorId, 
    c.varchar_ColorName, 
    m.varchar_Title, 
    m.pk_ManufacturerId, 
    u.varchar_CompanyName, 
    u.pk_UserId, 
    pl.pk_ProductLineId, 
    pl.varchar_ProductLineText 
FROM 
    tbl_Product AS p 
    JOIN tbl_DistributorLocationId AS l ON p.fk_LocationId = l.pk_DistributorLocationId 
    JOIN tbl_Manufacturer AS m ON p.fk_Manufacturer = m.pk_ManufacturerId 
    LEFT JOIN tbl_Color AS c ON p.fk_Colors = c.pk_ColorId 
    LEFT JOIN tbl_Texture AS t ON p.fk_Texture = t.pk_TextureId 
    LEFT JOIN tbl_ProductLine AS pl ON p.fk_ProductLine = pl.pk_ProductLineId 
    LEFT JOIN tbl_States AS s ON l.fk_StateId = s.pk_StateId 
    LEFT JOIN tbl_Users AS u ON l.fk_UserId = u.pk_UserId 
    LEFT JOIN tbl_UserType AS ut ON u.fk_UserTypeId = ut.pk_UserTypeId 
    LEFT JOIN tbl_ProductCategories AS pc ON p.fk_CategoryId = pc.pk_CategoryId 
    LEFT JOIN tbl_CategoryType AS ct ON pc.fk_CategoryTypeId = ct.pk_CategoryTypeId 
where 
    1 = 1 
    AND p.boolean_status = 1 
ORDER BY 
    LOCATE('', varchar_Title), 
    LOCATE('', varchar_ProductLineText), 
    LOCATE('', varchar_ColorName), 
    LOCATE('', varchar_TextureName), 
    LOCATE('', text_Description), 
    LOCATE('', varchar_CategoryName), 
    LOCATE('', varchar_CategoryTypeName) 
+0

применять предел и запускать пакетный процесс .., если это отчет, дает ограниченную сумму или дает сводку информации. – Sundar

+0

Мне нужны все данные за одно и то же время, поэтому ограничение невозможно в этом приложении с частицами – chudasamachirag

Смежные вопросы