Laravel 5.4 gives Wrong COM_STMT_PREPARE response size

Viewed 8485

I'm working on a website and it worked fine the past month, suddenly yesterday it crashed and says Wrong COM_STMT_PREPARE response size. Received 7.

enter image description here

This is my code in the controller:

public function newsFeed()
{
    // get all data needed for the news page

    try{

        $news = DB::SELECT("SELECT 
                                n.newId
                                ,n.title_en
                                ,n.title_es
                                ,n.description_en
                                ,n.description_es
                                ,n.newMainImg
                                ,n.tags
                                ,DATE_FORMAT(n.createDate, '%b - %e - %Y') as publishDate_en
                                ,DATE_FORMAT(n.createDate, '%e - %b - %Y') as publishDate_es
                                ,concat(u.firstName,' ',u.lastName) as author
                            FROM NEWS n
                              inner join USERS u
                                      on u.userId = n.author
                                     and u.statusId = 1
                            order by n.createDate desc limit 20"); 


        $favorites = DB::SELECT("SELECT 
                                    n.newId
                                    ,n.title_en
                                    ,n.title_es
                                    ,n.newMainImg
                                FROM
                                    NEWS n
                                WHERE viewsCount > 0
                                  and viewsCount is not null
                                order by viewsCount desc limit 6");


        $data = array(
            'news' => $news,
            'favorites' => $favorites
        );

        return view('news/newsFeed')->with('data', $data);

    }catch(Exception $exc){

        echo $exc->getMessage();
    }      

}

I haven't found any solution. Any help would be greatly appreciated.

UPDATE:

If it helps the server is in 000webhost, I've seen that many people is having the same issue.

UPDATE 2

The error says the problem is in Connection.php line 647

This is the code around that:

protected function run($query, $bindings, Closure $callback)
{
    $this->reconnectIfMissingConnection();

    $start = microtime(true);

    // Here we will run this query. If an exception occurs we'll determine if it was
    // caused by a connection that has been lost. If that is the cause, we'll try
    // to re-establish connection and re-run the query with a fresh connection.
    try {
        $result = $this->runQueryCallback($query, $bindings, $callback);
    } catch (QueryException $e) {
        $result = $this->handleQueryException(
            $e, $query, $bindings, $callback
        );
    }

    // Once we have run the query we will calculate the time that it took to run and
    // then log the query, bindings, and execution time so we will report them on
    // the event that the developer needs them. We'll log time in milliseconds.
    $this->logQuery(
        $query, $bindings, $this->getElapsedTime($start)
    );

    return $result;
}

and

protected function runQueryCallback($query, $bindings, Closure $callback)
{
    // To execute the statement, we'll simply call the callback, which will actually
    // run the SQL against the PDO connection. Then we can calculate the time it
    // took to execute and log the query SQL, bindings and time in our memory.
    try {
        $result = $callback($query, $bindings);
    }

    // If an exception occurs when attempting to run a query, we'll format the error
    // message to include the bindings with SQL, which will make this exception a
    // lot more helpful to the developer instead of just the database's errors.
    catch (Exception $e) {
        throw new QueryException(
            $query, $this->prepareBindings($bindings), $e
        );
    }

    return $result;
}
2 Answers

I got the same error with Laravel 7.5 + PHP 7.4 but after pcntl_fork(). Error log shows that this error comes from different part of codes run concurrently in children processes.

Reconnect to DB (just after forking) in all children processes solved this issue.

Related