如何在PHP中呼叫帶有輸入輸出參數的MySQL預存程序?

Susan Sarandon
發布: 2024-11-07 00:26:02
原創
537 人瀏覽過

How to Call MySQL Stored Procedures with Input and Output Parameters in PHP?

在 PHP 中呼叫帶有輸入和輸出參數的 MySQL 預存程序

開發人員經常遇到從 PHP 腳本呼叫預存程序的需要。預存程序可以採用輸入和輸出參數的組合,輸入參數向製程提供值,輸出參數從製程接收計算值。本文重點討論呼叫專門接受輸入和輸出參數的 MySQL 預存過程,不包括「inout」參數。

MySQLi 介面的挑戰

不幸的是,MySQLi 過程化和物件導向的介面缺乏對輸出儲存過程參數的本機支援。作為一種解決方法,可以利用 MySQL 使用者變數來接收輸出值並使用單獨的 SELECT 語句檢索它們。透過實現使用者變數和 SELECT 語句,可以有效處理具有輸入和輸出參數的預存程序。

過程式方法

考慮使用過程式MySQLi 介面的下列PHP 程式碼:

$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'];
登入後複製

在此範例中,MySQL 使用者變數(@sum、@product、 @average)在預存程序中定義。對 mysqli_query("SELECT @sum, @product, @average") 的呼叫會擷取預存程序設定的值並將它們指派給 PHP 變數($procOutput_sum、$procOutput_product、$procOutput_average)。

Object-物件導向的方法

或者,物件導向的 MySQLi介面可以是使用:

$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'];
登入後複製

物件導向的方法遵循類似的模式,利用prepare()、bind_param()、execute()和query()方法來呼叫儲存程序並擷取輸出值

透過利用MySQL 使用者變數和SELECT 語句,PHP 開發人員可以有效地呼叫需要輸入和輸出參數的預存程序。此技術為 MySQLi 介面中缺乏本機輸出參數支援提供了解決方法。

以上是如何在PHP中呼叫帶有輸入輸出參數的MySQL預存程序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板