Вы не можете выполнить несколько запросов за один вызов query()
(вы можете сделать это с помощью multi_query()
, но вы не можете настроить разделитель запросов, чтобы различать ;
, который разделяет запросы, и используется внутри процедуры). Так что разбейте это на несколько запросов.
$connection->query('xdrop procedure if exists parents');
$connection->query('
create procedure parents(in parent int(11),in name varchar(22))
begin
set @parent=parent;
drop temporary table if exists ids;
create temporary table ids(id int(11));
while @parent<>0 do
prepare statement from concat("select related into @parent from ",name," where id=?");
execute statement using @parent;
insert into ids(id) values(@parent);
end while;
select*from ids;
end;
');
$connection->query('drop function if exists counted');
$connection->query('
create function counted(parent int(11),name varchar(22))
returns int(11)
begin
call parents(parent,name);
return (select count(*) from ids);
end;
');
$fetch=$connection->query('select counted(3,"category");')->fetchall();