Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mendapatkan Pembolehubah daripada MySQL Stored Procedures dalam PHP PDO?

Bagaimana untuk Mendapatkan Pembolehubah daripada MySQL Stored Procedures dalam PHP PDO?

Patricia Arquette
Patricia Arquetteasal
2024-11-06 18:13:03307semak imbas

How to Retrieve Variables from MySQL Stored Procedures in PHP PDO?

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:

  1. Laksanakan Prosedur dengan Pembolehubah Input: Laksanakan prosedur dengan input anda dan tentukan pembolehubah MySQL untuk menyimpan hasilnya.
  2. Pembolehubah Pertanyaan: Jalankan pertanyaan berasingan untuk memilih pembolehubah MySQL yang mengandungi keputusan.

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:

  • Tetapkan ATTR_EMULATE_PREPARES PDO kepada benar untuk pengendalian ralat yang lebih baik.
  • Ikat pembolehubah PHP hanya pada parameter IN.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn