Masalah:
Bagaimana saya boleh mendapatkan semula nilai LAST_INSERT_ID() daripada prosedur tersimpan MySQL menggunakan PHP dan PDO?
Prosedur:
Pertimbangkan kod PHP berikut:
<?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; ?>
Walaupun kod ini mungkin kelihatan betul, ia tidak berfungsi kerana pepijat yang telah lama wujud dalam PDO.
Penyelesaian:
Untuk mendapatkan semula output daripada prosedur MySQL, ikut langkah berikut:
Langkah 1: Jalankan Prosedur
Jalankan prosedur dengan input anda dan nyatakan pembolehubah MySQL yang akan menyimpan hasilnya. Contohnya:
<?php $stmt = $db->prepare("CALL simpleProcedure(:name, @returnid)"); $stmt->bindValue(':name', $name, PDO::PARAM_STR); $stmt->execute(); ?>
Langkah 2: Tanya Pembolehubah MySQL
Jalankan pertanyaan berasingan untuk memilih pembolehubah MySQL:
<?php $stmt = $db->query("SELECT @returnid"); $result = $stmt->fetchAll(PDO::FETCH_COLUMN, 0); $returnid = $result[0]; ?>
Contoh:
Kod berikut termasuk contoh yang lebih terperinci menunjukkan penggunaan pembolehubah untuk jenis parameter yang berbeza (IN, INOUT, OUT):
Prosedur SQL :
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$$
Kod PHP:
<?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>"; ?>
Dengan mengikut langkah-langkah ini, anda boleh mendapatkan semula output daripada prosedur tersimpan MySQL menggunakan PDO dengan berkesan.
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Keluaran daripada Prosedur Tersimpan MySQL Menggunakan PDO dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!