Heim  >  Artikel  >  Datenbank  >  Wie rufe ich die Ausgabe von gespeicherten MySQL-Prozeduren mithilfe von PDO in PHP ab?

Wie rufe ich die Ausgabe von gespeicherten MySQL-Prozeduren mithilfe von PDO in PHP ab?

DDD
DDDOriginal
2024-11-08 05:03:02358Durchsuche

How to Retrieve Output from MySQL Stored Procedures Using PDO in PHP?

Abrufen von MySQL Stored Procedure-Variablen in PHP mit PDO

Problem:

Wie kann ich den LAST_INSERT_ID()-Wert abrufen? aus einer gespeicherten MySQL-Prozedur mit PHP und PDO?

Prozedur:

Betrachten Sie den folgenden PHP-Code:

<?php
$stmt = $db->prepare("CALL simpleProcedure(:name,:returnid)");
$stmt->bindValue(':name', $name, PDO::PARAM_STR);
$stmt->bindParam(':returnid', $returnid, PDO::PARAM_INT, 11);
$stmt->execute();
echo $returnid;
?>

Während dieser Code erscheinen mag Richtig, es funktioniert aufgrund eines seit langem bestehenden Fehlers in PDO nicht.

Lösung:

Um die Ausgabe einer MySQL-Prozedur abzurufen, befolgen Sie diese Schritte:

Schritt 1: Führen Sie die Prozedur aus

Führen Sie die Prozedur mit Ihren Eingaben aus und geben Sie an, welche MySQL-Variablen die Ergebnisse speichern sollen. Zum Beispiel:

<?php
$stmt = $db->prepare("CALL simpleProcedure(:name, @returnid)");
$stmt->bindValue(':name', $name, PDO::PARAM_STR);
$stmt->execute();
?>

Schritt 2: Fragen Sie die MySQL-Variablen ab

Führen Sie eine separate Abfrage aus, um die MySQL-Variablen auszuwählen:

<?php
$stmt = $db->query("SELECT @returnid");
$result = $stmt->fetchAll(PDO::FETCH_COLUMN, 0);
$returnid = $result[0];
?>

Beispiel:

Der folgende Code enthält ein detaillierteres Beispiel, das die Verwendung von Variablen für verschiedene Parametertypen (IN, INOUT, OUT) zeigt:

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); 
     SET pOut_Param        := ABS(pInput_Param) * -3;                
END$$

PHP-Code:

<?php
// Bind PHP variables
$phpInParam = 5;                  
$phpInOutParam = 404;
$phpOutParam = null;

// Prepare the SQL procedure call
$sql = "call demoSpInOut(:phpInParam, 
                         @varInOutParam, 
                         @varOutParam)";

$stmt = $db->prepare($sql);
$stmt->bindParam(':phpInParam', $phpInParam, PDO::PARAM_INT);

// Set the SQL User INOUT variables
$db->exec("SET @varInOutParam = $phpInOutParam");

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

// Get the SQL variables into PHP variables
$sql = "SELECT @varInOutParam AS phpInOutParam,
               @varOutParam   AS phpOutParam
        FROM dual";

$results = $db->query($sql)->fetchAll(PDO::FETCH_ASSOC);
$phpInOutParam = $results[0]['phpInOutParam'];
$phpOutParam = $results[0]['phpOutParam'];

// Display the PHP variables
echo "phpInParam: $phpInParam<br>";
echo "phpInOutParam: $phpInOutParam<br>";
echo "phpOutParam: $phpOutParam<br>";
?>

Indem Sie diese Schritte befolgen, können Sie die Ausgabe von gespeicherten MySQL-Prozeduren mithilfe von PDO effektiv abrufen.

Das obige ist der detaillierte Inhalt vonWie rufe ich die Ausgabe von gespeicherten MySQL-Prozeduren 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