LAST_INSERT_ID() aus einer gespeicherten MySQL-Prozedur mit PHP PDO abrufen
Das Abrufen des LAST_INSERT_ID()-Werts aus einer gespeicherten MySQL-Prozedur in PHP PDO kann eine verwirrende Aufgabe sein. Trotz umfangreicher Dokumentation bleibt es eine häufige Quelle von Herausforderungen für Entwickler. Lassen Sie uns eine Lösung für dieses Problem finden.
Das Hauptproblem liegt in der Tatsache, dass MySQL Variablen für IN-, INOUT- und OUT-Parameter in gespeicherten Prozeduren verwendet. Um die LAST_INSERT_ID() zu erhalten, ist ein zweistufiger Prozess erforderlich:
Schritt 1: Führen Sie die gespeicherte Prozedur mit Variablen aus
$stmt = $db->prepare("CALL simpleProcedure(:name, :returnid)"); $stmt->bindValue(':name', $name, PDO::PARAM_STR); $stmt->bindValue(':returnid', $returnid, PDO::PARAM_INT, 11); $stmt->execute();
Dieser Schritt führt die gespeicherte Prozedur aus Prozedur, die Eingabewerte übergibt und Variablen deklariert, um den LAST_INSERT_ID()-Wert zu empfangen. Wir können jedoch nicht direkt auf den Wert der PHP-Variablen zugreifen.
Schritt 2: Werte der Variablen abrufen
Um die LAST_INSERT_ID() zu erhalten, müssen wir ausführen eine separate Abfrage zum Abrufen der den SQL-Variablen zugewiesenen Werte. Dazu gehört das Festlegen der SQL-Benutzervariablen und das Ausführen einer Abfrage zur Auswahl ihrer Werte.
$sql = "SELECT @returnid AS last_insert_id"; $result = $db->query($sql)->fetch(); $last_insert_id = $result['last_insert_id'];
Durch Befolgen dieser Schritte können Sie den Wert LAST_INSERT_ID() erfolgreich aus einer gespeicherten MySQL-Prozedur mithilfe von PHP PDO abrufen. Es ist wichtig zu beachten, dass das Binden von PHP-Variablen an INOUT- oder OUT-Parameter zu Fehlern führen kann. Verwenden Sie stattdessen die SQL-Benutzervariablen, um variable Parameter zu verarbeiten.
Das obige ist der detaillierte Inhalt vonWie rufe ich LAST_INSERT_ID() aus einer gespeicherten MySQL-Prozedur mit PHP PDO ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!