【问题标题】:Cannot return results from mySQL stored procedure无法从 mySQL 存储过程返回结果
【发布时间】:2012-10-02 21:09:53
【问题描述】:

我正在尝试使用 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 - 线程堆栈溢出:”

我尝试在不使用@data out 变量的情况下调用存储过程,但出现 HY000 错误。我最初并不希望这个调用是一个存储过程,但是 PDO 似乎不喜欢我在一次执行中有多个语句的面孔。此外,我似乎无法通过 phpmyadmin 使用静态参数正确调用该过程。但是,sql 语句在过程之外可以完美运行。

我不是最精通 PDO 和 mySQL,但我已经阅读了很多关于 phpmyadmin、PDO 和 PHP 中与存储过程相关的错误。任何帮助将不胜感激。

【问题讨论】:

    标签: php mysql pdo


    【解决方案1】:

    您使用的内存可能比 MySQL 配置允许您使用的更多。

    见:

    MySQL error 1436: Thread stack overrun, with simple query

    如果您有权访问,请尝试更改您的 my.cnf 文件。

    【讨论】:

    • 成功了……我觉得搜索这么长时间有点愚蠢,你花了 2 分钟。我什至四处搜索该错误代码,但没有偶然发现任何引用 my.cnf 的内容。你知道增加这个数字是否有任何负面影响吗?谢谢!
    猜你喜欢
    • 2014-02-06
    • 2012-01-09
    • 1970-01-01
    • 2013-06-21
    • 2013-08-14
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多