Heim > Datenbank > MySQL-Tutorial > Wie rufe ich Variablen aus gespeicherten MySQL-Prozeduren in PHP PDO ab?

Wie rufe ich Variablen aus gespeicherten MySQL-Prozeduren in PHP PDO ab?

Patricia Arquette
Freigeben: 2024-11-06 18:13:03
Original
300 Leute haben es durchsucht

How to Retrieve Variables from MySQL Stored Procedures in PHP PDO?

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:

  1. Prozedur mit Eingabevariablen ausführen:Führen Sie die Prozedur mit Ihren Eingaben aus und geben Sie die MySQL-Variablen an, um das Ergebnis zu speichern.
  2. Variablen abfragen: Führen Sie eine separate Abfrage aus, um die MySQL-Variablen auszuwählen, die die Ergebnisse enthalten.

Prozeduraufruf mit Variablen

Ersetzen Sie im bereitgestellten PHP-Code die problematische Bindung durch Folgendes:

$stmt = $db->prepare("CALL simpleProcedure(:name, @returnid)");
Nach dem Login kopieren

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'];
Nach dem Login kopieren

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:

  • Setzen Sie PDOs ATTR_EMULATE_PREPARES auf „true“, um eine bessere Fehlerbehandlung zu erzielen.
  • Binden Sie PHP-Variablen nur an IN-Parameter.

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
Nach dem Login kopieren

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'];
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage