1

私は joomla と sql の経験がほとんどないので、助けていただければ幸いです! 私は joomla 2.5 を使用しており、データベースからデータをクエリして、次のコードでメモリに保存しています。

function getList()
{
    $mainframe = JFactory::getApplication('site');
        $db = JFactory::getDBO();
        $query = "  SELECT 
                    * 
                FROM 
                    #__ListUser 
                WHERE
                    $db->setQuery( $query );"
        $rows = $db->loadObjectList();
        return $rows;
}

3つ質問があります。

  1. データベースにクエリを実行すると、新しい DB セッションが開かれます。後で閉じる必要がありますか?それとも自動ですか?
  2. この方法を実現するためのより効率的な方法を知っていますか (ユーザー セッションのメモリ サイズは約 11MB です!)。
  3. この方法を使用してデータベースにアクセスする場合、セキュリティ上の問題はありますか?

どうもありがとうございました!どんな助けでも大歓迎です!

4

3 に答える 3

1

コードは次のようになります (現在どのように機能するかわかりません)。

function getList()
{
   // $mainframe = JFactory::getApplication('site'); // you don't need this line!
        $db = JFactory::getDBO();
        $query = "  SELECT 
                    * 
                FROM 
                    #__ListUser 
                WHERE
                    1=1"; // just some condition to extract selected rows
        $db->setQuery( $query ); // this sets the query and it's joomla, not sql.
        $rows = $db->loadObjectList();
        return $rows;
}

WHERE .... には条件が必要であることに注意してください (それ以外の場合は、すべての行が必要な場合は、WHERE とそれに続くものを削除してください)。

  1. 閉める必要はありません
  2. 11Mb は必ずしもそのクエリによるものではありません。LIMIT 0,1 を追加してみてください (1 行だけを返すため)。メモリがあまり変わらないことがわかります。グローバル構成でデバッグをオンにして、コンポーネントをリロードします。ページの一番下に、メモリを消費している拡張機能が表示されます。ただし、ほとんどのインストールでは 11Mb が許容されます。
  3. 入力パラメーターを使用して WHERE 条件を作成する場合は、SQL インジェクションを防ぐために値を $db->quote() してください。
于 2013-04-05T23:38:20.533 に答える
0

試す

$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select($db->quote('*')
      ->from($db->quoteName('#__Listuser') // Do you really have upper case there?
      ->where('your condition with proper quoting');
$db->setQuery($query);
$rows = $db->loadObjectList();
于 2013-04-06T03:42:35.787 に答える