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!