我正在尝试使用PDO从存储过程中提取数据,而且我正在非常艰难地将其打包。我在最近几天搜索了一下,似乎无法直接解决我的问题。
这就是我创建程序的方法:
DELIMITER $$
CREATE PROCEDURE sp_searchArticles(
IN tagList VARCHAR(255),
IN lastArticle INT(10),
OUT data INT(10))
BEGIN
CREATE TEMPORARY TABLE at_results (
id INTEGER(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
article_id INTEGER(10) NOT NULL,
datetime DATETIME NOT NULL,
common_tags INTEGER NOT NULL)
SELECT at.article_id, art.datetime, Count(at.article_id) AS common_tags
FROM article_tags AS at
INNER JOIN articles AS art ON at.article_id = art.article_id
WHERE at.tag_id IN (tagList)
GROUP BY at.article_id
ORDER BY common_tags DESC, art.datetime DESC;
CREATE TEMPORARY TABLE at_article
SELECT id
FROM at_results
WHERE article_id = lastArticle;
SELECT article_id
INTO data
FROM at_results, at_article
WHERE at_results.id > at_article.id;
END $$
DELIMITER ;
然后我使用PDO调用SP:
$sql = "CALL sp_searchArticles(:tag_list, :last_article, @data)";
$tag_sth = $this->db->prepare($sql);
$tag_sth->bindParam(':tag_list', $tag_list);
$tag_sth->bindParam(':last_article', $last_article);
$tag_sth->execute();
$data = $this->db->query("select @data")->fetch(PDO::FETCH_ASSOC);
但它返回“#1436 - Thread stack overrun:”
我试过调用存储过程而不使用@data输出变量,但是我得到了HY000错误。我原本不希望这个调用是一个存储过程,但PDO似乎不喜欢我在一次执行中有多个语句的面孔。此外,我似乎无法通过phpmyadmin使用静态参数正确调用该过程。但是,sql语句在该过程之外完美地工作。
我不是最熟练的PDO和mySQL,但我已经阅读了很多关于phpmyadmin,PDO和PHP中与存储过程有关的错误。任何帮助将不胜感激。
答案 0 :(得分:2)
您可能正在使用比配置MySQL更多的内存来允许您使用。
请参阅:
MySQL error 1436: Thread stack overrun, with simple query
如果您有权访问my.cnf文件,请尝试更改。