Rumah  >  Soal Jawab  >  teks badan

PHP: Panggil prosedur tersimpan MySQL dengan parameter input dan output (bukan "INOUT")

Saya ingin memanggil prosedur tersimpan dalam MySQL daripada PHP. Proses ini mengambil parameter input dan output - bukan "INOUT" parameter.

Untuk memberikan contoh mudah, katakan saya mempunyai prosedur tersimpan berikut dalam MySQL:

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 ;

Sekarang, dari sisi skrip/halaman PHP, katakan saya mempunyai pembolehubah berikut (katakan ia "pembolehubah input proc") dan saya mahu memberikannya sebagai inputparameter kepada prosedur tersimpan apabila saya memanggilnya:

$procInput1 = "123";
$procInput2 = "456";
$procInput3 = "789";

Andaikan pada bahagian skrip/halaman PHP, saya juga mempunyai pembolehubah berikut (mari kita panggil mereka "pembolehubah keluaran proc") dan saya ingin memberikannya sebagai outputparameter kepada prosedur tersimpan apabila saya memanggilnya, mengikut prosedur tersimpan Tetapan :

$procOutput_sum;
$procOutput_product;
$procOutput_average;

Jadi, pada asasnya, apa yang saya mahu lakukan, pada dasarnya (Saya sedar kod berikut tidak sah) , dari segi skrip/halaman PHP, adalah... < /p>

call test_proc($procInput1, $procInput2, $procInput3, $procOutput_sum, $procOutput_product, $procOutput_average);

...Setelah dipanggil, kod PHP berikut akan muncul...

echo "Sum: ".$procOutput_sum;
echo "Product: ".$procOutput_product;
echo "Average: ".$procOutput_average;

...hendaklah menghasilkan output berikut:

Sum: 1368
Product: 44253432
Average: 456

Perhatikan bahawa saya ingin dapat melakukan ini menggunakan MySQLi prosedurfungsi/antara muka jika boleh. Jika tidak mungkin maka saya akan menggunakan kaedah untuk menjadikannya berfungsi.

Saya telah membuat pengaturcaraan untuk seketika, tetapi bahasa PHP adalah usaha yang agak baru bagi saya. Saya dapati banyak tutorial untuk memanggil prosedur tersimpan MySQL daripada PHP. Ada yang tutorial untuk memanggil prosedur tersimpan menggunakan parameter input, ada yang tutorial untuk memanggil prosedur tersimpan menggunakan parameter output, dan ada yang menggunakan parameter inout<调用存储过程的教程/strong>. Saya tidak menemui sebarang tutorial atau contoh tentang memanggil prosedur tersimpan yang secara serentak serentak input dan parameter output, tanpa secara khusus tidak menggunakan parameter "inputout". Saya tidak dapat memikirkan cara untuk mengekod pengikatan parameter (cth: mysqli_stmt_bind_param dan mysqli_stmt_bind_result) dan membuatnya berfungsi.

Sebarang bantuan akan sangat dihargai, terima kasih terlebih dahulu!

P粉502608799P粉502608799366 hari yang lalu707

membalas semua(2)saya akan balas

  • P粉122932466

    P粉1229324662023-10-20 15:06:04

    DB::select('call SP_fci_cb_emp_comp_salary_revision_add(?,?,?,@,@)',
                            [
                                $my_compensation['detail']['employee_master_id'],
                                Carbon::createFromFormat('d/m/Y', $salary_revised_result['detail']->effective_date)->format('Y-m-d'),
                                $request->user_id
                            ]);

    balas
    0
  • P粉576184933

    P粉5761849332023-10-20 13:23:10

    Malangnya, MySQLi tidak mempunyai sebarang sokongan asli untuk mengeluarkan parameter prosedur tersimpan sebaliknya mesti dibuat kepada pembolehubah pengguna MySQL dan kemudian menggunakan pengisytiharan yang berasingan. SELECT 获取值

    Gunakan antara muka program:

    $procInput1 = 123;
    $procInput2 = 456;
    $procInput3 = 789;
    
    $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);
    $procOutput_sum     = $result['@sum'];
    $procOutput_product = $result['@product'];
    $procOutput_average = $result['@average'];

    Atau, gunakan antara muka berorientasikan objek:

    $procInput1 = 123;
    $procInput2 = 456;
    $procInput3 = 789;
    
    $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();
    $procOutput_sum     = $result['@sum'];
    $procOutput_product = $result['@product'];
    $procOutput_average = $result['@average'];

    balas
    0
  • Batalbalas