web-dev-qa-db-ja.com

JDatabaseQuery :: union()を使用するとエラーが発生する

JDatabaseQuery :: union()を使用してデータベースクエリを作成すると、エラーが発生します。

デバッグを無効にすると、おそらく切断しようとしたときに、ページの下部にこれが表示されます。

警告:mysqli :: stat():mysqliをフェッチできませんでした... /libraries/joomla/database/driver/mysqli.php(219行目)

警告:mysqli_close():mysqliをフェッチできませんでした... /libraries/joomla/database/driver/mysqli.php(226行目)

デバッグを有効にすると、クエリが実行されるとさらにメッセージが表示されます。

注意:unserialize():オフセットでのエラー... in ... /libraries/joomla/database/query.php 1472行目

そのエラーは、JDatabaseQuery :: __ clone()の次の行を参照しています。

$this->{$k} = unserialize(serialize($v));

この問題は、異なるMySQL、PHP 5.xおよびXAMPPとUbuntu ServerのJoomlaバージョンで発生します。最初にコンポーネントを開発しているときに発見しましたが、クリーンなJoomlaインストールでクリーンサーバー上のクリーンデータベース。キャッシュは無効になり、セッション時間は120分です。この問題を繰り返すには、/ administrator/components/com_content/models/articles.phpのContentModelArticles :: getListQuery()を次のように置き換えます。

protected function getListQuery()
    {
        // Create a new query object.
        $db = $this->getDbo();
        $query = $db->getQuery(true);
        $sub = $db->getQuery(true);

        // Select the required fields from the first table.
        $query->select('id')
            ->from('#__content');

        // Select the required fields from the second table.
        $sub->select('content_id')
            ->from('#__content_rating');

        $query->union($sub);

        return $query;
    }

ただし、サブクエリをJDatabaseQueryMysqliオブジェクトではなく文字列にした場合、問題はありません。

protected function getListQuery()
    {
        // Create a new query object.
        $db = $this->getDbo();
        $query = $db->getQuery(true);

        // Select the required fields from the first table.
        $query->select('id')
            ->from('#__content');

        $query->union('SELECT content_id FROM #__content_rating');

        return $query;
    }

私が何か間違ったことをしているのなら、それはクエリオブジェクトにあります。私は関連する docs を見て、 this フォーラムの投稿を見つけ、アドバイスに従って/ administrator/components/com_Finder/helpers/indexer /から例をコピーしましたquery.php。新しいクエリオブジェクトを作成するのではなく、最初のクエリオブジェクトを複製して変更します。まったく役に立たない。そのフォーラムスレッドやオンラインの他の場所で、これがバグである可能性があることを示す兆候がありますが、私が見つけたものはすべてかなり古く、そのバグは明らかに対処済み。

これはJoomlaまたは私に関する問題ですか?

3
chrBrd

Jdatabaseとunionクエリで奇妙な経験をしました。時々、そのために正しい構文を取得できなかった場合、私がやっていることは$ query = "[ここにクエリを手動で書き込む]"のようになり、次に$ db-> setQuery($ query)などになります。あまり役に立ちませんが、私はそれを追加すると思いました...

1
Jim Dee