CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_get_tree`(parentInt int)
BEGIN
DECLARE _cid INT;
DECLARE _sort INT;
DECLARE _title VARCHAR(100) CHARACTER SET UTF8;
DECLARE _pcid INT;
DECLARE _lvl INT;
DECLARE _con INT DEFAULT 0;
DECLARE _done INT DEFAULT 0;
DECLARE _rs CURSOR FOR SELECT cid,sort,title,pcid,lvl FROM dp_category WHERE pcid = parentInt;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET _done = 1;
DROP TABLE IF EXISTS temp_table;
CREATE TEMPORARY TABLE temp_table
(
cid INT,
sort INT,
title VARCHAR(100),
pcid INT,
lvl INT
)
CHARSET = UTF8;
TRUNCATE TABLE temp_table;
OPEN _rs;
REPEAT
FETCH NEXT FROM _rs INTO _cid,_sort,_title,_pcid,_lvl;
IF NOT _done THEN
INSERT INTO temp_table(cid,sort,title,pcid,lvl) VALUES(_cid,_sort,_title,_pcid, _lvl);
SELECT COUNT(*) INTO _con FROM dp_category WHERE pcid = _cid;
IF _con > 0 THEN
INSERT INTO temp_table(cid,sort,title,pcid,lvl) SELECT cid,sort,title,pcid,lvl FROM dp_category WHERE pcid = _cid;
END IF;
END IF;
UNTIL _done
END REPEAT;
CLOSE _rs;
SELECT * FROM temp_table;
DROP TABLE temp_table;
END表结构是:
这个在mysql正常跑通没问题返回想要的结果
但是用tp5调用的时候返回的错误如下:

这个查了一下是连接量暴增,连接堆栈不够用,基本不太常见
排查了一下如果使用游标就不能最后再用SELECT,如果用SELECT不能用游标
考虑是否和tp5没有关系特别用php原生调用了试了一下
<?php
$conn = new mysqli('localhost', 'root', '', 'dsp');
$result = $conn->query("call test()");
print_r($result);返回的结果是正确的,说明不是php或是mysql存储过程的问题,应该还是出在tp5框架上,看看哪位有兴趣一起研究一下这个问题。 最佳答案