Rumah  >  Artikel  >  pangkalan data  >  Bagaimanakah cara saya mendapatkan pembolehubah prosedur tersimpan MySQL menggunakan PDO dalam PHP?

Bagaimanakah cara saya mendapatkan pembolehubah prosedur tersimpan MySQL menggunakan PDO dalam PHP?

Patricia Arquette
Patricia Arquetteasal
2024-11-09 03:20:02406semak imbas

How do I retrieve MySQL stored procedure variables using PDO in PHP?

Mengambil semula Pembolehubah Prosedur Tersimpan MySQL menggunakan PDO dalam PHP

Mendapatkan semula nilai LAST_INSERT_ID() daripada prosedur tersimpan MySQL boleh menjadi tugas yang sukar. . Walaupun dokumentasi yang mencukupi dalam talian, proses itu sering terbukti sukar difahami oleh banyak pembangun. Artikel ini bertujuan untuk menjelaskan isu ini, menyediakan panduan langkah demi langkah untuk mendapatkan semula nilai pembolehubah menggunakan PHP PDO.

Parameter Prosedur PHP dengan 'IN', 'INOUT' dan 'OUT' Parameter

Kunci untuk mendapatkan semula pembolehubah ialah memahami proses dua peringkat yang terlibat. Pertama, prosedur mesti dilaksanakan dengan parameter input yang diperlukan dan pembolehubah yang akan menyimpan keputusan. Selepas itu, pertanyaan berasingan dilaksanakan untuk mendapatkan semula nilai daripada pembolehubah yang ditetapkan.

Proses Dua Peringkat untuk Mendapatkan Prosedur Simpanan MySQL Menggunakan PDO

Untuk menunjukkan proses ini, mari kita pertimbangkan perkara berikut senario:

  • Prosedur SQL dengan parameter 'IN', 'INOUT' dan 'OUT'
  • Kod PHP untuk melaksanakan prosedur dan mendapatkan semula nilai pembolehubah

SQL Prosedur:

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); /* always positive sum  */
     SET pOut_Param        := ABS(pInput_Param) * -3;                /* always negative * 3  */ 
END

Kod PHP:

// DB Connection
$db = appDIC('getDbConnection', 'default'); // get the default db connection
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

// Set PHP Variables
$phpInParam = 5;
$phpInOutParam = 404; // PHP InOut variable
$phpOutParam = null; // PHP Out variable

// Define and Prepare the SQL procedure call
$sql = "call demoSpInOut(:phpInParam,
                         @varInOutParam, /* mysql variable name will be read and updated */
                         @varOutParam)"; /* mysql variable name that will be written to  */

$stmt = $db->prepare($sql);

// Bind PHP Variables and Set SQL Variables
$stmt->bindParam(':phpInParam', $phpInParam, PDO::PARAM_INT);
$db->exec("SET @varInOutParam = $phpInOutParam"); // This is safe as it just sets the value into the MySql variable.

// Execute the procedure
$allOk = $stmt->execute();

// Get the SQL Variables into the PHP variables
$sql = "SELECT @varInOutParam AS phpInOutParam,
               @varOutParam AS phpOutParam
        FROM dual";
$results = current($db->query($sql)->fetchAll());

$phpInOutParam = $results['phpInOutParam'];
$phpOutParam = $results['phpOutParam'];

// Display the PHP variables
echo "phpInParam = " . $phpInParam . "\n";
echo "phpInOutParam = " . $phpInOutParam . "\n";
echo "phpOutParam = " . $phpOutParam . "\n";

Nota Tambahan:

  • Mengikat pembolehubah PHP (dalam kes ini, $phpInParam) ke parameter SQL IN adalah mudah dan dilakukan melalui Kaedah bindParam() PDO.
  • Mengikat pembolehubah PHP ke parameter SQL INOUT dan OUT tidak disokong dan akan mengakibatkan ralat masa jalan.
  • Helah untuk mendapatkan semula nilai prosedur SQL adalah dengan menggunakan pembolehubah pengguna SQL untuk menahan keputusan.
  • Menjalankan PDO dalam 'emulate prepares mode' disyorkan untuk penyahpepijatan dan ralat pengesanan.

Kesimpulan:

Mengambil semula pembolehubah prosedur tersimpan MySQL dalam PHP PDO ialah proses pelbagai rupa yang melibatkan pelaksanaan prosedur dan mendapatkan semula nilai daripada pembolehubah pengguna SQL. Dengan mengikut langkah yang digariskan di atas, pembangun boleh mengakses pembolehubah yang diperlukan dengan cekap daripada prosedur tersimpan MySQL menggunakan PDO.

Atas ialah kandungan terperinci Bagaimanakah cara saya mendapatkan pembolehubah prosedur tersimpan MySQL menggunakan PDO dalam PHP?. 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