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