Ich habe meinen PHP-Code für die Website neu geschrieben und MySQL Stored Procedures hinzugefügt.
In meiner lokalen Version funktioniert alles gut, aber nachdem ich meine Site auf den Hosting-Server hochgeladen habe, bekomme ich ständig einen fatalen Fehler: "Vorbereitete Anweisung muss neu erstellt werden".
Manchmal lädt die Seite, manchmal wird geladen, und ich sehe diesen Fehler. Was ist das?
UPDATE: Das Problem ist nach dem Wechsel zum VPS-Server verschwunden. Danke für die Hilfe.
Dies ist eine Möglichkeit: MySQL Bug # 42041
Sie schlagen vor, den Wert von table_definition_cache
zu erhöhen.
Sie können über die Neuvorbereitung in den MySQL-Dokumenten nachlesen.
Antwort von @docwhat scheint nett zu sein, aber auf einem Shared-Hosting-Server darf nicht jeder table_open_cache
berühren oder table_definition_cache
Optionen.
Da dieser Fehler mit vorbereiteten Anweisungen zusammenhängt, habe ich versucht, diese mit PDO zu emulieren, indem ich die folgende Option zur Verfügung stelle:
%Vor% Hinweis: eigentlich das ist in einem Laravel 5.6 Projekt, und ich habe die Option in config/database.php
:
Ich habe die Auswirkungen der Emulation von vorbereiteten Anweisungen auf die Dauer des Ladens meiner Website nicht getestet, aber es funktioniert gegen den Fehler SQLSTATE[HY000]: General error: 1615 Prepared statement needs to be re-prepared
, den ich bekommen habe.
Update auf die Performance: die emulierte Version scheint etwas schneller zu sein (32,7 ± 1,4ms emuliert, 35,0 ± 2,3ms normal, n = 10, p-Wert) = 0,027 für den zweiseitigen Student's T-Test).
Ich habe denselben Fehler in Ruby on Rails in einer freigegebenen Hosting-Umgebung erhalten. Es ist möglicherweise nicht die sicherste Lösung, aber das Deaktivieren vorbereiteter Anweisungen löschte die Fehlermeldung für mich.
Dies kann durch Hinzufügen der Einstellung "prepared_statements: false" zur Datei "database.yml" erfolgen:
%Vor%Dies scheint eine vernünftige Lösung zu sein, wenn Sie keine Kontrolle über die Konfigurationseinstellungen auf dem MySQL-Server haben.