执行数据库查询后关闭会话(Close session after executing databas

2019-10-17 23:57发布

我有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. 当我查询数据库,一个新的数据库会话被打开,我需要后,关闭或是自动的?
  2. 你知道的更有效的方式来实现这一方法(用户会话内存大小为11MB左右!)
  3. 是否有与访问使用这种方法的数据库中的任何安全问题?

非常感谢你! 任何帮助将是非常赞赏!

Answer 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不一定是由于该查询,尝试添加限制0,1(只返回一个行),你会看到你的记忆并没有太大变化。 打开调试在全局配置,并重新加载组件。 你会看到页面最底部其扩展吃了你的记忆。 11MB是可以接受的,虽然在大多数安装。
  3. 如果你创建你的WHERE使用输入PARAMS状态,只要确保你$ DB->报价()的任何值,以防止SQL注入。


Answer 2:

尝试

$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();


Answer 3:

1。

酷:

如果你想关闭或关闭数据库连接的会话,你可以使用:

$db->disconnect(); // See: http://api.joomla.org/cms-3/classes/JDatabaseDriver.html#method_disconnect

但我想,对于那些希望使用JFactory :: getDBO()所有其它模块,插件或模板的数据库连接; 也关闭,然后,需要重新打开。

更好:

您应该使用查询被转移到一个PHP变量之后,而不是释放的结果: http://api.joomla.org/cms-3/classes/JDatabaseDriverMysql.html#method_freeResult

$db->freeResult();


文章来源: Close session after executing database query