![](/img/trans.png)
[英]Why does a mysql stored procedure return a null result in one environment and not another?
[英]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
}
我怎樣才能讓它通過正確的值?
您的過程具有輸入參數startdate
和enddate
。 然后在您的過程中,您指的是用戶定義的變量@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.