我有一个包含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();
添加获取行代码没有任何区别。
任何人都有任何关于在哪里寻找问题原因的建议?