Verwenden von PDO zum Aufrufen gespeicherter Prozeduren mit Out-Parametern
Das Aufrufen gespeicherter Prozeduren mithilfe von PDO kann ein nahtloser Prozess sein; Wenn Sie jedoch versuchen, gespeicherte Prozeduren ohne Parameter zu verwenden, kann 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
Ein Blick in die Tiefe des PDO-Handbuchs und der begleitenden Diskussionen deckt eine Anomalie innerhalb der vorbereiteten PDOs auf Anweisungsfunktionalität. Der Kern des Problems liegt in der Handhabung von Out-Parametern innerhalb gespeicherter Prozeduren.
Um dieses Problem zu beheben, ist eine spezielle 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 abruft der Out-Parameter nach der Ausführung der gespeicherten Prozedur:
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 Out-Parameter mithilfe von PDO verbunden ist löst sich auf und ermöglicht eine nahtlose Ausführung und den Abruf unserer Parameterwerte.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3