Wie man den MySQL Fehler loswird 'Vorbereitete Anweisung muss neu vorbereitet werden'

8

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.

    
oyatek 07.12.2010, 19:36
quelle

4 Antworten

16

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.

    
docwhat 07.12.2010, 20:18
quelle
0

Meine Lösungen bestehen darin, eine Routine wie diese zu erstellen:

%Vor%

Ich hoffe, das hilft jemandem

    
Gabriel 06.09.2016 18:22
quelle
0

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 :

hinzugefügt %Vor%

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).

    
Marten Koetsier 05.04.2018 14:20
quelle
-1

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.

    
John Langford 27.10.2016 12:46
quelle

Tags und Links