Variablen aus gespeicherten MySQL-Prozeduren in PHP PDO abrufen
Diese Diskussion zielt darauf ab, eine umfassende Lösung für das Abrufen von Variablen aus gespeicherten MySQL-Prozeduren mit PHP bereitzustellen PDO.
Problem
Beim Versuch, die LAST_INSERT_ID() von einer MySQL-gespeicherten Prozedur in PHP PDO abzurufen, wurde festgestellt, dass der implementierte Code nicht funktionierte.
Lösung
Leider kann dieses Problem auf einen seit langem bestehenden Fehler in der Verarbeitung von MySQL-gespeicherten Prozeduren mit OUT-Parametern durch PHP zurückgeführt werden.
Mehrstufiger Prozess
Die Problemumgehung umfasst einen zweistufigen Prozess:
Prozeduraufruf mit Variablen
Ersetzen Sie im bereitgestellten PHP-Code die problematische Bindung durch Folgendes:
$stmt = $db->prepare("CALL simpleProcedure(:name, @returnid)");
Dadurch wird die PHP-Variable $name an den Eingabeparameter gebunden und erstellt eine MySQL-Variable namens @returnid zum Speichern der Ausgabe. Das @-Symbol gibt an, dass returnid eine MySQL-Variable ist.
Auswählen von Variablen
Nach der Ausführung der Prozedur verwenden Sie die folgende Abfrage, um die @returnid-Variable abzurufen:
$result = $db->query("SELECT @returnid AS result_id"); $row = $result->fetch(); $returnid = $row['result_id'];
Alternativer Ansatz mit OUT-Parametern
Wenn eine vollständigere Lösung gewünscht wird, einschließlich der Verwendung von INOUT- und OUT-Parametern, können das folgende Codebeispiel und die folgenden Tipps verwendet werden:
Tipps:
Beispielcode:
SQL-Prozedur:
CREATE PROCEDURE demoSpInOutSqlVars(IN pInput_Param INT, INOUT pInOut_Param INT, OUT pOut_Param INT) BEGIN SET pInOut_Param = ABS(pInput_Param) + ABS(pInOut_Param); SET pOut_Param = ABS(pInput_Param) * -3; END
PHP-Code:
$phpInParam = 5; $phpInOutParam = 404; $phpOutParam = null; $stmt = $db->prepare("CALL demoSpInOutSqlVars(:phpInParam, @varInOutParam, @varOutParam)"); $stmt->bindParam(':phpInParam', $phpInParam, PDO::PARAM_INT); $db->exec("SET @varInOutParam = $phpInOutParam"); $stmt->execute(); $result = $db->query("SELECT @varInOutParam AS phpInOutParam, @varOutParam AS phpOutParam FROM dual"); $row = $result->fetch(); $phpInOutParam = $row['phpInOutParam']; $phpOutParam = $row['phpOutParam'];
Das obige ist der detaillierte Inhalt vonWie rufe ich Variablen aus gespeicherten MySQL-Prozeduren in PHP PDO ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!