開發人員經常遇到從 PHP 腳本呼叫預存程序的需要。預存程序可以採用輸入和輸出參數的組合,輸入參數向製程提供值,輸出參數從製程接收計算值。本文重點討論呼叫專門接受輸入和輸出參數的 MySQL 預存過程,不包括「inout」參數。
不幸的是,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)。
或者,物件導向的 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中文網其他相關文章!