[英]PHP MySQL - Why stored procedure call is ended unexpectedly in PHP code
我的存儲過程有一個奇怪的問題。 我編寫了一個在 MySQL 控制台和 MySQL GUI 工具上正確運行的存儲過程:SqlYog。 但它在 PHP 代碼中不起作用。 在 PHP 中運行 SP 是否有任何特定設置? 在我的存儲過程中,我使用了 MySQL session 變量。
我的環境: Windows 10 x64, PHP 7.3, MariaDB: 10.4.13-MariaDB
。
我附上了我的 SP 代碼的一部分。
問題塊如下:
SET @p_number = v_number;
SET @p_quantitySum = v_stock_net;
EXECUTE stmt1 USING @p_number, @p_quantitySum;
這是一個准備好的聲明。
SET @sql_query = "
SELECT
@b_id := id,
@b_price := IFNULL(price, 0),
@b_ib_seq := seq,
@b_ib_qty_accumulated := IFNULL(quantitySum, 0)
FROM
(SELECT
ib.*,
(@seq := @seq + 1) AS seq,
@sum := (@sum + quantity) AS quantitySum
FROM
buying ib
INNER JOIN
(SELECT
@sum := 0,
@seq := 0) b
WHERE ib.number = ?
ORDER BY ib.date DESC) ib
WHERE quantitySum > ?
LIMIT 1 ;
" ;
PREPARE stmt1 FROM @sql_query ;
PHP 調用: mysqli_query($this->conn, "CALL sp_update_daily_buying('2021-01-21');")
我在循環中運行這個 select。 執行EXECUTE stmt1 USING @p_number, @p_quantitySum;
,我的存儲過程在第三次執行后結束。 那是在循環中,2次都可以,但是在第3次執行之后,SP就結束了。
正如我上面提到的,在 GUI 工具和 MySQL 控制台中,它可以正常工作(循環正確結束)。
有什么具體的設置嗎?
提前致謝!
我可以在幾個小時內修復這個錯誤。
原因是我在存儲過程中使用了多個 SELECT 語句,這些語句沒有變量賦值或 INSERT。 因此存儲過程在執行后返回了多個結果集,這使得 PHP function mysqli_query
無法正確處理。 我在 PHP 中找不到如何處理這種情況的解決方案。 也許mysqli_multi_query
可以解決這個問題。
但是在存儲過程中,我通過添加變量分配稍微改變了多個選擇語句。 最后,我可以開始工作了。
SELECT
id,
price,
seq,
quantitySum
INTO @vb_id, @vb_price, @vb_ib_seq, @vb_ib_qty_accumulated
FROM
(SELECT
ib.*,
(@seq := @seq + 1) AS seq,
@sum := (@sum + quantity) AS quantitySum
FROM
item_buying ib
INNER JOIN
(SELECT
@sum := 0,
@seq := 0) b
WHERE ib.number = ?
ORDER BY ib.date DESC) ib
WHERE quantitySum > ?
LIMIT 1
或者我們可以使用臨時 memory 表從 select 獲取結果集,而不是使用 session 變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.