Процедура вызова MySQL в функции ERROR - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь получить счет из результата процедуры. Я видел, что вы можете создать временную таблицу и сосчитать ее позже. Но когда я добавляю свою процедуру к функции, она перестает работать. Почему это так?

  $connection->query('
   drop procedure if exists parents;
   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;
   drop function if exists counted;
   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();

Я получаю логическую ошибку выборки.

1 Ответ

0 голосов
/ 02 мая 2018

Вы не можете выполнить несколько запросов за один вызов 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...