PHP MySQL存储过程不完整的结果

时间:2017-10-03 05:06:22

标签: php mysql stored-procedures

我有一个包含Items表的数据库,其中每个Item都有一个父位置(例如,“House”中“Office”中“File Cabinet”中“Drawer A”中的“Check book”)。我创建了一个存储过程来从Items表中提取位置层次结构,并将其存储在单独的表Location Chain中。这是存储过程代码:

drop procedure if exists GetLocationChain;
delimiter //
create procedure GetLocationChain(in piItemId INT UNSIGNED)
begin
  set @liItemID := piItemId;
  truncate table LocationChain;
  while @liItemID > 0 do
    insert into LocationChain(ItemId, Item, Description, ParentLocId, Notes)
      select ItemId, Item, Description, ParentLocId, Notes
      from Items
      where ItemId = @liItemID;

    select @liItemID := ParentLocId from Items where ItemId = @liItemID;
    end while;

  end//

delimiter ;

我可以从MySQL命令行运行它,它按预期工作,链中的记录数量应尽可能多。在上面的例子中将是五个记录:(1)“支票簿”,(2)“抽屉A”,(3)“文件柜”,(4)“办公室”,(5)“房子”。

我有一个PHP文件,使用以下代码调用我存储的MySQL过程:

$lsSQL = 'call GetLocationChain(' . $lnSeldItemId . ');';
if(!$result = $db->query($lsSQL)){
  die('There was an error running the query [' . $lsSQL.']: error [' . $db->error . ']');
  }
$db->close();

当我运行它时,LocationChain表永远不会有两个以上的记录,即使位置链比那个更长。无论是从PHP文件中查询LocationChain表还是直接从MySQL命令行查询,我都得到不超过两条记录。

即使我的被调用过程没有返回结果,我也尝试在我的PHP代码中插入代码来提取它:

$lsSQL = 'call GetLocationChain(' . $lnSeldItemId . ');';
if(!$result = $db->query($lsSQL)){
  die('There was an error running the query [' . $lsSQL.']: error [' . $db->error . ']');
  }
while($row = mysqli_fetch_array($result)){
  $array0[] = $row;
  }
$db->close();

添加获取行代码没有任何区别。

任何人都有任何关于在哪里寻找问题原因的建议?

0 个答案:

没有答案