MySQL-存储过程如果被CLI调用但返回工作台,则返回null

问题描述 投票:0回答:1

[我正在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
}

如何使它传递正确的值?

php mysql stored-procedures command-line-interface mysql-workbench
1个回答
0
投票

您的过程具有输入参数startdateenddate。然后,在您的过程中,您指的是user-defined variables @startdate@enddate。这两个是两个独立的东西。

用户定义的变量是特定于会话的,即,它们在整个会话中保持其值。调用过程时,它将显示会话中的值,而不是输入参数值。在您的工作台会话中,这些变量具有值,但是在您的CLI中没有。

要在过程中使用输入变量,请使用相同的变量(最好使用前缀,因此最终不要将它们与列名混合使用:]

create procedure myproc (in_startdate datetime, in_enddate datetime)
begin
select in_startdate as beg, in_enddate as fin;
end
© www.soinside.com 2019 - 2024. All rights reserved.