Beim Migrieren eines PHP-Skripts von PHP 5.2 nach PHP 5.3 bin ich auf folgendes Problem gestoßen: Der allgemeine Zweck des Skripts ist Data Mining. Ich habe eine Prozedur, die Daten zum MySQL-Server hinzufügt. Da es wirklich repetitiv ist, habe ich es (vor einiger Zeit) neu geschrieben, um MySQLi zu verwenden, insbesondere vorbereitete Anweisungen, da insgesamt 3 mögliche Abfragen durchgeführt werden müssen. Wie auch immer, jetzt, auf dem PHP 5.3 Server, stürzt das Skript in der folgenden Zeile ab:
%Vor% Wo $prepCheck
mit $prepCheck = mysqli_prepare($con, $checkQuery) or die("Error");
erstellt wird. Die Abfrage läuft gut auf dem MySQL-Server ($ checkQuery, das ist) und der PHP-Code funktionierte auch auf dem vorherigen Server.
Beim Ausführen des Skripts mit strace
wurde nichts angezeigt, da der letzte Aufruf darin der Systemaufruf für echo "Execute";
ist, der 29936 19:44:18 write(1, "Execute\n", 8) = 8
ist.
Das Verbindungsobjekt ist nicht FALSE
, und selbst wenn es war, sollte es mit einem anderen Fehler fehlschlagen, oder?
Hier kommt der seltsamste Teil: Diese Prozedur schlägt nicht fehl , wenn ich das Skript ausführe, wodurch die Anzahl der besuchten Seiten begrenzt und das Skript erfolgreich abgeschlossen wird. Wenn ich jedoch ein höheres Limit festlege, schlägt es beim ersten Aufruf dieser Prozedur und genau in dieser Zeile fehl, immer .
Wenn jemand irgendwelche Vorschläge hat, was das verursachen könnte, wären sie sehr dankbar.
Ich kann Code einfügen, wenn jemand ein größeres Bild sehen muss, aber das Verfahren ist sehr lang und langweilig (vielleicht ist das Skript deshalb fehlgeschlagen:).
So beginnt das Skript: error_reporting(E_ALL); ini_set('display_errors', '1');
.
Außer der 'magischen' Segmentation fault
wird kein Fehler gemeldet. Ich benutze keine APC.
Nicht sicher, ob es relevant ist, aber ich verwende CLI, um das Skript auszuführen, keine Web-Schnittstelle.
PHP Version ist 5.3.8, MySQL Version ist 5.1.56. Das Speicherlimit ist auf 64 MB festgelegt.
BEARBEITEN: Die Prozedur failing + einige der anderen Code ist hier hochgeladen: Ссылка . Die ganze Datei ist riesig und hässlich, und ich glaube, dass sie irrelevant ist, also poste ich sie jetzt nicht. Die fehlgeschlagene Zeile ist 113.
Eine Antwort auf meine eigene Frage, da ich das Problem gelöst habe, und es gibt keine anderen Antworten ...
Der Kredit geht an @ jap1968, weil er auf die Funktion mysqli_stmt_error (die ich nicht benötigt hätte, da ich error_reporting(E_ALL)
habe) verweist.
Das Problem war, dass MySQL eine sehr seltsame Standardkonfiguration hatte: besonders
%Vor%Dies hat dazu geführt, dass der MySQL-Server die Verbindung nach nur 30 Sekunden beendet hat (Standard ist laut MySQL-Website mehr als eine halbe Stunde). Dies führte wiederum dazu, dass die Funktion mysqli_stmt_bind_result mit einem Segmentierungsfehler fehlschlug.
Tags und Links php mysqli segmentation-fault