@ docwhat's ответ кажется приятным, но на сервере общего хостинга не всем разрешено трогать опции table_open_cache
или table_definition_cache
.
Поскольку эта ошибка связана сПодготовив операторы, я попытался «эмулировать» их с помощью PDO, предоставив следующую опцию:
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass, [
PDO::ATTR_EMULATE_PREPARES => true
]);
Примечание: на самом деле это проект Laravel 5.6, и я добавил опциюв config/database.php
:
'connections' => [
'mysql' => [
'driver' => 'mysql',
'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' => '',
'strict' => true,
'engine' => null,
'options' => [
PDO::ATTR_EMULATE_PREPARES => true,
],
],
(...)
],
Я не проверял влияние эмуляции подготовленных операторов на продолжительность загрузки моего сайта, но он работает против ошибки SQLSTATE[HY000]: General error: 1615 Prepared statement needs to be re-prepared
Я получил.
Обновление производительности: эмулируемая версия кажется немного быстрее (эмулируется 32,7 ± 1,4 мс, нормально 35,0 ± 2,3 мс, n = 10, значение p = 0,027 для двух-Хвост Стьюдента).