За последние 24 часа нас посетили 6879 программистов и 476 роботов. Сейчас ищет 151 программист ...

Allowed memory size of 1610612736 bytes exhausted (tried to allocate 1073741832 bytes)

Тема в разделе "PHP для новичков", создана пользователем solomonrei, 16 апр 2018.

Метки:
  1. solomonrei

    solomonrei Новичок

    С нами с:
    12 апр 2018
    Сообщения:
    8
    Симпатии:
    0
    Добрый день!Возникла такая ошибка! Allowed memory size of 1610612736 bytes exhausted (tried to allocate 1073741832 bytes), in W:\domains\foto.loc\lib\db_class.php on line 61.не понимаю почему она возникла,так как я вытаскиваю всего лишь одну строку.
    вот код:
    PHP:
    1.     ini_set('memory_limit', '1024M');
    2. class DB {
    3.  
    4.     protected $mysqli;
    5.     protected $host;
    6.     protected $root;
    7.     protected $password;
    8.     protected $db;
    9.  
    10.     public function __construct($host, $root, $password, $db) {
    11.  
    12.         $this->host = $host;
    13.         $this->root = $root;
    14.         $this->password = $password;
    15.         $this->db = $db;
    16.         $this->mysqli = new mysqli($this->host, $this->root, $this->password, $this->db);
    17.         $this->mysqli->set_charset('utf8');
    18.     }
    19.     private static function string($field,$value) {
    20.         $field = "`".implode('`, `', explode(',', $field))."`";
    21.         $value = "'".$value."'";
    22.         $array = [$field => $value];
    23.         return $array;
    24.     }
    25.     private static function where($field,$value) {
    26.         if ((strpos($field, "id")) !== false) {
    27.             $str = self::string($field, $value);
    28.             foreach ($str as $key => $v)
    29.                 $str = $key.' = '.$v;
    30.             $request = "WHERE ".$str;
    31.         }
    32.         else{
    33.                 if ((is_string($field)) && (strlen($field) != 0)) {
    34.                     $str = self::string($field, $value);
    35.                     foreach ($str as $key => $v)
    36.                         $str = $key.' = '.$v;
    37.                     $request = "WHERE ".$str;
    38.                 }
    39.         }
    40.         return $request;
    41.     }
    42.     public function select($table_name, $field, $where = false, $field_where = null, $value_where = null) {
    43.         $str = self::string($table_name, $field);
    44.         foreach ($str as $key => $v)
    45.         if (!$where) {
    46.             foreach ($str as $key => $v)
    47.             $request = "SELECT ".$v." FROM ".$key;
    48.         return $request;
    49.         }
    50.         elseif ($where) {
    51.         $str_where = self::string($field_where, $value_where);
    52.         foreach ($str_where as $key_where => $v_where)
    53.             $str_where = $key_where.' = '.$v_where;
    54.             $request = "SELECT ".$v." FROM ".$key." WHERE ".$str_where;
    55.             $query = $this->mysqli->query($request);
    56.             if (!$query) return false;
    57.             else {
    58.                 $arr = [];
    59.                 while (($row = $query->fetch_assoc()) !== false)
    60.                     $arr[] = $row;
    61.                 }
    62.             }
    63.         }
    64.  
    65.         public function __destruct() {
    66.         if (($this->mysqli) && (!$this->mysqli->connect_errno)) $this->mysqli->close();
    67.         }
    68.     }
    Вызываю метод из другого файла
    PHP:
    1. require_once 'db_class.php';
    2. $db = new DB("localhost", "root", "", "test");
    3. $db->select("users","name", true, "age", "14");
    Ошибка происходит вот тут
    PHP:
    1.  $arr[] = $row;
     
    #1 solomonrei, 16 апр 2018
    Последнее редактирование: 16 апр 2018
  2. nospiou

    nospiou Активный пользователь

    С нами с:
    4 фев 2018
    Сообщения:
    2.431
    Симпатии:
    322
    ini_set('memory_limit', '1024M'); Если хочешь что бы код посмотрели используй тег code php
     
  3. solomonrei

    solomonrei Новичок

    С нами с:
    12 апр 2018
    Сообщения:
    8
    Симпатии:
    0
    ошибка
    Allowed memory size of 1073741824 bytes exhausted (tried to allocate 1073741832 bytes) in W:\domains\foto.loc\lib\db_class.php on line 61
    я изменил выше код
     
  4. nospiou

    nospiou Активный пользователь

    С нами с:
    4 фев 2018
    Сообщения:
    2.431
    Симпатии:
    322
    Зачем?
     
  5. TeslaFeo

    TeslaFeo Активный пользователь

    С нами с:
    9 мар 2016
    Сообщения:
    2.577
    Симпатии:
    638
    эта ошибка значит, что не хватает оперативной памяти
    вряд ли проблема в этом классе
    что выше?
    что делаешь вообще?
     
  6. solomonrei

    solomonrei Новичок

    С нами с:
    12 апр 2018
    Сообщения:
    8
    Симпатии:
    0
    цикл будет выводить данные,пока их не станет,то есть пока не будет false
    --- Добавлено ---
    я пытаюсь реализовать класс,в котором будут методы select,update,delete,where,order
     
  7. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    11.843
    Симпатии:
    1.679
    Адрес:
    :сердА
    Выводить куда? Не в буфер ли? Который, в итоге, разжирается в памяти и скрипт лопается.
     
  8. solomonrei

    solomonrei Новичок

    С нами с:
    12 апр 2018
    Сообщения:
    8
    Симпатии:
    0
    если убрать
    Код (Text):
    1. !== false
    ,то выводится массив Array ( [name] => name ),но данные не те,которые в БД
    --- Добавлено ---
    Блин,как раз в буфер,как же мне быть,как исправить ошибку?