запрос таблицы php mysql выдает ошибку HTTP 500, если строки в таблице очень высокие

#php #mysql #sql #laravel

#php #mysql #sql #laravel

Вопрос:

У меня есть приведенный ниже код, работающий в laravel для моего приложения flutter. Хотя код работает нормально, однако я получаю ошибку HTTP 500 много раз, и этот код не выполняет команду. У меня около 30 тыс. строк в таблице «продукты», что вызывает ошибку HTTP 500. Влияет ли общее количество строк в таблице на выполнение кода, поскольку он выходит из строя 5-6 раз и работает 1-2 раза. Можно ли что-нибудь сделать, чтобы избежать ошибки HTTP 500, если строки в таблице превышают 10-20 тыс.

  public function updateItem(Request $req){
   
    $results = DB::table('products')->get()->where('id' , $req->input('product_id'));
     foreach($results as $row) {
          $stock_quantity = $row->stock_quantity;
     }
    
    if($stock_quantity >=$req->input('quantity')) {
        
     $affected = DB::table('bag')->where('id', $req->input('id'))->update(['quantity' => $req->input('quantity'), 
            ]
                );
               
                if($affected == 1) {
                $response = array('message'=>"Bag item updated",'result'=>1);
                
                 return $response;
      } else {
        $response = array('message'=>"Error in updating", 'result'=>0);
        return $response;
      }
        
    }else {
        
        $response = array('message'=>"Stock not available", 'result'=>0);
        return $response;
        
    }
    }


  

Комментарии:

1. MySQL не выдает HTTP-ошибки. Проверьте журналы ошибок HTTPD вашего сервера. Похоже, что вы можете превысить какой-то предел php.ini.

2. Обычно 20-30 тысяч строк — это ничто, когда речь заходит о базах данных. Проблема, скорее всего, заключается в том, что у вас есть ->get() перед ->where , что означает, что вы получаете все строки в памяти, а затем фильтруете результирующую коллекцию в PHP вместо того, чтобы фильтровать их в базе данных

3. я получал сообщение об ошибке: разрешенный объем памяти 134217728 байт исчерпан (пытался выделить 12288 байт). решение puting -> get after -> где его решили. Спасибо @apokryfos