簡體   English   中英

MySQL - 如果由 CLI 調用,存儲過程返回 null 但導致工作台

[英]MySQL - Stored procedure return null if called by CLI but result in workbench

我正在 mysql 上編寫一個存儲過程,但我不知道為什么從工作台調用時它給出了正確的答案,但是當被 PHP API 或 CLI 調用時它給出了 NULL。

在我的情況下,程序是這樣的:

use dummydb
delimiter GO
create procedure myproc (startdate datetime, enddate datetime)
begin
select @startdate as beg, @enddate as fin;
end
GO
delimiter ;

當我從工作台call myproc ("2018-03-01", "2020-11-11"); 它返回:

beg         fin
2018-03-01  2020-11-11

但是當我從 CLI 調用它時:

mysql> use dummydb
Database changed
mysql> call myproc('2018-03-01','2020-03-01');
+------+------+
| beg  | fin  |
+------+------+
| NULL | NULL |
+------+------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.01 sec)

當我從 php 調用它時,它返回 2014

// [....]
$conn = new mysqli("127.0.0.1", "theuser", "thepassword", "dummydb");

$sql = "CALL myproc('2018-03-01', '2020-11-11')";

$result = $conn->query($sql);

var_dump($result->fetch_assoc());

返回這個:

array(2) {
  'beg' =>
  NULL
  'fin' =>
  NULL
}

我怎樣才能讓它通過正確的值?

您的過程具有輸入參數startdateenddate 然后在您的過程中,您指的是用戶定義的變量@startdate@enddate 這兩個是兩個不同的東西。

用戶定義的變量是特定於會話的,即它們在整個會話期間保持其值。 當您調用您的過程時,它會顯示會話中的值,而不是輸入參數值。 在您的工作台會話中,這些變量具有值,但在您的 CLI 中沒有。

要在過程中使用輸入變量,請使用相同的變量(最好使用前綴,以免最終將它們與列名混合):

create procedure myproc (in_startdate datetime, in_enddate datetime)
begin
select in_startdate as beg, in_enddate as fin;
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM