0

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は、1回の実行で複数のステートメントがあるという顔を好まないようです。また、phpmyadminを介して静的パラメータを使用してプロシージャを正しく呼び出すことができないようです。ただし、SQLステートメントはプロシージャの外部では完全に機能します。

私はPDOとmySQLに精通しているわけではありませんが、ストアドプロシージャに関連するphpmyadmin、PDO、およびPHP内のバグについて多くのことを読みました。どんな助けでも大歓迎です。

4

1 に答える 1

2

MySQLが使用できるように構成されているよりも多くのメモリを使用している可能性があります。

見る:

MySQLエラー1436:単純なクエリでスレッドスタックがオーバーランしました

my.cnfファイルにアクセスできる場合は、それを変更してみてください。

于 2012-10-02T21:24:08.980 に答える