Mi aplicación Laravel (versión 5.0.33) de repente comenzó a arrojar el siguiente error:
local.ERROR: excepción 'PDOException' con mensaje 'SQLSTATE[HY000]: Error general: 2014 No se pueden ejecutar consultas mientras otras consultas sin búfer están activas. Considere usar PDOStatement::fetchAll(). Alternativamente, si su código solo se ejecutará contra mysql, puede habilitar el almacenamiento en búfer de consultas configurando el atributo PDO::MYSQL_ATTR_USE_BUFFERED_QUERY.' en proveedor/laravel/framework/src/Illuminate/Database/Connection.php:296
Mirando la línea relevante en Connection.php, parece que ya está usando fetchAll:
public function select($query, $bindings = array(), $useReadPdo = true) { return $this->run($query, $bindings, function($me, $query, $bindings) use ($useReadPdo) { if ($me->pretending()) return array(); // For select statements, we'll simply execute the query and return an array // of the database result set. Each element in the array will be a single // row from the database table, and will either be an array or objects. $statement = $this->getPdoForSelect($useReadPdo)->prepare($query); $statement->execute($me->prepareBindings($bindings)); return $statement->fetchAll($me->getFetchMode()); }); }También agregué lo siguiente a mi config/database.php:
'options' => [ PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true ]
Pero sigo recibiendo el mismo error. Esta aplicación ha estado funcionando correctamente durante años y no había realizado ningún cambio en el código, por lo que no sé por qué sucedió esto de repente. También soy nuevo en Laravel y no escribí el código original, por lo que ni siquiera estoy seguro de dónde comenzar a depurar el problema. ¿Alguien puede ayudar?
Tuve el mismo problema con una consulta en el paquete datatable yajra/laravel-datatables en el servidor de alojamiento, cambiando el juego de caracteres a 'charset' => 'utf8mb4' , intercalación 'collation' => 'utf8mb4_unicode_ci' y algunas opciones funcionan conmigo, completo configuración:
'mysql' => [ 'driver' => 'mysql', 'url' => env('DATABASE_URL'), 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'unix_socket' => env('DB_SOCKET', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'prefix_indexes' => true, 'strict' => true, 'engine' => null, 'options' => array( PDO::ATTR_EMULATE_PREPARES => true, PDO::MYSQL_ATTR_LOCAL_INFILE => true, PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true ), ],ref: almacén de columnas Laravel y MemSQL, las consultas sin búfer están activas y https://www.eversql.com/mysql-utf8-vs-utf8mb4-whats-the-difference- between-utf8-and-utf8mb4/