Mengambil Pembolehubah daripada MySQL Stored Procedures dalam PHP PDO
Perbincangan ini bertujuan untuk menyediakan penyelesaian yang komprehensif untuk mendapatkan semula pembolehubah daripada MySQL stored procedures menggunakan PHP PDO.
Isu
Semasa cuba mendapatkan LAST_INSERT_ID() daripada prosedur tersimpan MySQL dalam PHP PDO, didapati kod yang dilaksanakan tidak berfungsi.
Penyelesaian
Malangnya, isu ini boleh dikaitkan dengan pepijat yang telah lama wujud dalam pengendalian PHP terhadap prosedur tersimpan MySQL dengan parameter OUT.
Proses Berbilang Langkah
Penyelesaian melibatkan proses dua langkah:
Panggilan Prosedur dengan Pembolehubah
Dalam kod PHP yang disediakan, gantikan pengikatan yang bermasalah dengan yang berikut:
$stmt = $db->prepare("CALL simpleProcedure(:name, @returnid)");
Ini mengikat pembolehubah PHP $name kepada parameter input dan mencipta pembolehubah MySQL bernama @returnid untuk menyimpan output. Simbol @ menandakan bahawa returnid ialah pembolehubah MySQL.
Memilih Pembolehubah
Selepas pelaksanaan prosedur, gunakan pertanyaan berikut untuk mendapatkan semula pembolehubah @returnid:
$result = $db->query("SELECT @returnid AS result_id"); $row = $result->fetch(); $returnid = $row['result_id'];
Pendekatan Alternatif dengan Parameter OUT
Jika penyelesaian yang lebih lengkap diingini, termasuk penggunaan parameter INOUT dan OUT, sampel dan petua kod berikut boleh digunakan:
Petua:
Kod Contoh:
Prosedur SQL:
CREATE PROCEDURE demoSpInOutSqlVars(IN pInput_Param INT, INOUT pInOut_Param INT, OUT pOut_Param INT) BEGIN SET pInOut_Param = ABS(pInput_Param) + ABS(pInOut_Param); SET pOut_Param = ABS(pInput_Param) * -3; END
Kod PHP:
$phpInParam = 5; $phpInOutParam = 404; $phpOutParam = null; $stmt = $db->prepare("CALL demoSpInOutSqlVars(:phpInParam, @varInOutParam, @varOutParam)"); $stmt->bindParam(':phpInParam', $phpInParam, PDO::PARAM_INT); $db->exec("SET @varInOutParam = $phpInOutParam"); $stmt->execute(); $result = $db->query("SELECT @varInOutParam AS phpInOutParam, @varOutParam AS phpOutParam FROM dual"); $row = $result->fetch(); $phpInOutParam = $row['phpInOutParam']; $phpOutParam = $row['phpOutParam'];
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Pembolehubah daripada MySQL Stored Procedures dalam PHP PDO?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!