簡體   English   中英

無法從mySQL存儲過程返回結果

[英]Cannot return results from mySQL stored procedure

我正在嘗試使用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輸出變量,但是我得到了HY000錯誤。 我原本不希望這個調用是一個存儲過程,但PDO似乎不喜歡我在一次執行中有多個語句的面孔。 此外,我似乎無法通過phpmyadmin使用靜態參數正確調用該過程。 但是,sql語句在該過程之外完美地工作。

我不是最熟練的PDO和mySQL,但我已經閱讀了很多關於phpmyadmin,PDO和PHP中與存儲過程有關的錯誤。 任何幫助將不勝感激。

您可能正在使用比配置MySQL允許您使用更多的內存。

看到:

MySQL錯誤1436:線程堆棧溢出,簡單查詢

如果您有權訪問它,請嘗試更改my.cnf文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM