Bagaimana untuk Mendapatkan Keluaran daripada Prosedur Tersimpan MySQL Menggunakan PDO dalam PHP?

DDD
Lepaskan: 2024-11-08 05:03:02
asal
352 orang telah melayarinya

How to Retrieve Output from MySQL Stored Procedures Using PDO in PHP?

Mengambil semula Pembolehubah Prosedur Tersimpan MySQL dalam PHP Menggunakan PDO

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;
?>
Salin selepas log masuk

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();
?>
Salin selepas log masuk

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];
?>
Salin selepas log masuk

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$$
Salin selepas log masuk

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>";
?>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan