Heim >Datenbank >MySQL-Tutorial >Warum wirft PDO „OUT- oder INOUT-Argument ... ist keine Variable' aus, wenn gespeicherte Prozeduren mit Out-Parametern aufgerufen werden?
Verwenden von PDO zum Aufrufen gespeicherter Prozeduren mit Out-Parametern
Das Aufrufen gespeicherter Prozeduren mithilfe von PDO kann ein nahtloser Prozess sein; Beim Versuch, gespeicherte Prozeduren ohne Parameter zu verwenden, kann jedoch ein rätselhafter Fehler auftreten:
SQLSTATE[42000]: Syntax error or access violation: 1414 OUT or INOUT argument 1 for routine mydb.proc_OUT is not a variable or NEW pseudo-variable in BEFORE trigger
Die Lösung: Eine PDO-Besonderheit
Eintauchen in die Tiefen von Das PDO-Handbuch und die begleitenden Diskussionen enthüllen eine Anomalie innerhalb der vorbereiteten Kontoauszugsfunktionalität von PDO. Der Kern des Problems liegt in der Handhabung unserer Parameter innerhalb gespeicherter Prozeduren.
Um dieses Problem zu beheben, ist eine spezifische Problemumgehung erforderlich:
$stmt = $db->prepare("CALL SomeStoredProcedure(?, ?)"); $stmt->execute(array($someInParameter1, $someInParameter2));
Alternativer Ansatz
Eine weitere Option besteht darin, die gespeicherte Prozedur so zu ändern, dass sie eine SELECT-Anweisung enthält, die den Out-Parameter nach der gespeicherten Prozedur abruft Ausführung:
CALL SomeStoredProcedure($someInParameter1, $someInParameter2, @someOutParameter); SELECT @someOutParameter;
Dieser modifizierte Ansatz ahmt das Verhalten nach, das beim direkten Aufruf der gespeicherten Prozedur in MySQL beobachtet wird.
Durch die Übernahme dieser Problemumgehungen wird der rätselhafte Fehler behoben, der mit dem Aufruf gespeicherter Prozeduren ohne Verwendung von Parametern verbunden ist PDO wird aufgelöst, was eine nahtlose Ausführung und den Abruf unserer Parameterwerte ermöglicht.
Das obige ist der detaillierte Inhalt vonWarum wirft PDO „OUT- oder INOUT-Argument ... ist keine Variable' aus, wenn gespeicherte Prozeduren mit Out-Parametern aufgerufen werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!