Heim  >  Artikel  >  Datenbank  >  Wie rufe ich gespeicherte MySQL-Prozedurvariablen mithilfe von PDO in PHP ab?

Wie rufe ich gespeicherte MySQL-Prozedurvariablen mithilfe von PDO in PHP ab?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-09 03:20:02404Durchsuche

How do I retrieve MySQL stored procedure variables using PDO in PHP?

Variablen gespeicherter MySQL-Prozeduren mithilfe von PDO in PHP abrufen

Das Abrufen des Werts von LAST_INSERT_ID() aus einer gespeicherten MySQL-Prozedur kann eine entmutigende Aufgabe sein . Trotz umfangreicher Online-Dokumentation erweist sich der Prozess für viele Entwickler oft als schwer fassbar. Dieser Artikel soll dieses Problem entmystifizieren und eine Schritt-für-Schritt-Anleitung zum Abrufen des Variablenwerts mit PHP PDO bereitstellen.

PHP-Prozedurparameter mit „IN“, „INOUT“ und „OUT“ Parameter

Der Schlüssel zum Abrufen der Variablen liegt im Verständnis des zweistufigen Prozesses. Zunächst muss die Prozedur mit den notwendigen Eingabeparametern und den Variablen ausgeführt werden, die die Ergebnisse speichern. Anschließend wird eine separate Abfrage ausgeführt, um die Werte aus den angegebenen Variablen abzurufen.

Zweistufiger Prozess zum Abrufen gespeicherter MySQL-Prozeduren mithilfe von PDO

Um diesen Prozess zu demonstrieren, Betrachten wir das folgende Szenario:

  • SQL-Prozedur mit den Parametern „IN“, „INOUT“ und „OUT“
  • PHP-Code zum Ausführen der Prozedur und zum Abrufen der Variablenwerte

SQL-Prozedur:

CREATE PROCEDURE `demoSpInOutSqlVars`(IN     pInput_Param  INT,
                                      INOUT  pInOut_Param  INT,
                                      OUT    pOut_Param    INT)
BEGIN
    /*
     * Pass the full names of SQL User Variable for these parameters. e.g. '@varInOutParam'
     * These 'SQL user variables names' are the variables that Mysql will use for:
     *    1) finding values
     *    2) storing results
     *
     * It is similar to 'variable variables' in PHP.  
     */
     SET pInOut_Param      := ABS(pInput_Param) + ABS(pInOut_Param); /* always positive sum  */
     SET pOut_Param        := ABS(pInput_Param) * -3;                /* always negative * 3  */ 
END

PHP-Code:

// DB Connection
$db = appDIC('getDbConnection', 'default'); // get the default db connection
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

// Set PHP Variables
$phpInParam = 5;
$phpInOutParam = 404; // PHP InOut variable
$phpOutParam = null; // PHP Out variable

// Define and Prepare the SQL procedure call
$sql = "call demoSpInOut(:phpInParam,
                         @varInOutParam, /* mysql variable name will be read and updated */
                         @varOutParam)"; /* mysql variable name that will be written to  */

$stmt = $db->prepare($sql);

// Bind PHP Variables and Set SQL Variables
$stmt->bindParam(':phpInParam', $phpInParam, PDO::PARAM_INT);
$db->exec("SET @varInOutParam = $phpInOutParam"); // This is safe as it just sets the value into the MySql variable.

// Execute the procedure
$allOk = $stmt->execute();

// Get the SQL Variables into the PHP variables
$sql = "SELECT @varInOutParam AS phpInOutParam,
               @varOutParam AS phpOutParam
        FROM dual";
$results = current($db->query($sql)->fetchAll());

$phpInOutParam = $results['phpInOutParam'];
$phpOutParam = $results['phpOutParam'];

// Display the PHP variables
echo "phpInParam = " . $phpInParam . "\n";
echo "phpInOutParam = " . $phpInOutParam . "\n";
echo "phpOutParam = " . $phpOutParam . "\n";

Zusätzliche Hinweise:

  • Das Binden von PHP-Variablen (in diesem Fall $phpInParam) an SQL IN-Parameter ist unkompliziert und erfolgt über die bindParam()-Methode von PDO.
  • Das Binden von PHP-Variablen an SQL INOUT und OUT-Parameter werden nicht unterstützt und führen zu Laufzeitfehlern.
  • Der Trick beim Abrufen von SQL-Prozedurwerten besteht darin, SQL-Benutzervariablen zum Speichern der Ergebnisse zu verwenden.
  • PDO im Emulation-Vorbereitungsmodus ausführen ' wird zum Debuggen und zur Fehlererkennung empfohlen.

Fazit:

Das Abrufen gespeicherter MySQL-Prozedurvariablen in PHP PDO ist ein vielschichtiger Prozess, der die Ausführung der Prozedur und umfasst Abrufen von Werten aus SQL-Benutzervariablen. Durch Befolgen der oben beschriebenen Schritte können Entwickler mithilfe von PDO effizient auf die erforderlichen Variablen aus gespeicherten MySQL-Prozeduren zugreifen.

Das obige ist der detaillierte Inhalt vonWie rufe ich gespeicherte MySQL-Prozedurvariablen mithilfe von PDO in PHP ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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