Apabila memanggil prosedur tersimpan dalam MySQL yang memerlukan kedua-dua parameter input dan output (tidak termasuk parameter INOUT), adalah penting untuk memahami nuansa sambungan PHP dan antara muka pernyataan.
Penyediaan Prosedur
Pertimbangkan prosedur tersimpan MySQL berikut, yang mengambil parameter input dan mengira nilai output:
DELIMITER $$ DROP PROCEDURE IF EXISTS `test_proc`$$ CREATE PROCEDURE `test_proc`( in input_param_1 int, in input_param_2 int, in input_param_3 int, out output_sum int, out output_product int, out output_average int ) BEGIN set output_sum = input_param_1 + input_param_2 + input_param_3; set output_product = input_param_1 * input_param_2 * input_param_3; set output_average = (input_param_1 + input_param_2 + input_param_3) / 3; END$$ DELIMITER ;
Sambungan dan Pernyataan PHP
Untuk memanggil prosedur ini, anda boleh menggunakan sama ada antara muka prosedur atau berorientasikan objek untuk MySQLi.
Antara Muka Prosedur:
$mysqli = mysqli_connect(); $call = mysqli_prepare($mysqli, 'CALL test_proc(?, ?, ?, @sum, @product, @average)'); mysqli_stmt_bind_param($call, 'iii', $procInput1, $procInput2, $procInput3); mysqli_stmt_execute($call); $select = mysqli_query($mysqli, 'SELECT @sum, @product, @average'); $result = mysqli_fetch_assoc($select);
Antara Muka Berorientasikan Objek:
$mysqli = new mysqli(); $call = $mysqli->prepare('CALL test_proc(?, ?, ?, @sum, @product, @average)'); $call->bind_param('iii', $procInput1, $procInput2, $procInput3); $call->execute(); $select = $mysqli->query('SELECT @sum, @product, @average'); $result = $select->fetch_assoc();
Pengikatan Parameter
Untuk kedua-dua antara muka, langkah mengikat parameter adalah penting. Parameter input biasanya diikat dengan 'i' untuk integer, dan parameter output diikat menggunakan '@' diikuti dengan nama parameter.
Output Retrieval
Selepas melaksanakan Kenyataan CALL, pernyataan SELECT yang berasingan dilaksanakan untuk mendapatkan semula nilai daripada pembolehubah pengguna MySQL (@sum, @product, @average) yang diisi oleh prosedur tersimpan.
Kesimpulan
Walaupun MySQLi tidak menyokong pengikatan parameter output langsung secara asli, menggunakan pembolehubah pengguna dan pernyataan SELECT seterusnya membolehkan pembangun bekerja dengan prosedur yang memerlukan kedua-dua parameter input dan output.
Atas ialah kandungan terperinci Bagaimanakah saya boleh memanggil Prosedur Tersimpan MySQL dengan Kedua-dua Parameter Input dan Output dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!