admin

执行数据库查询后关闭会话

sql

我对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. 使用此方法访问数据库是否存在任何安全问题?

非常感谢你!任何帮助将不胜感激!


阅读 209

收藏
2021-07-01

共1个答案

admin

该代码应如下所示(我现在不知道它如何工作):

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(仅返回一行),您会发现内存变化不大。在全局配置中打开调试,然后重新加载组件。在页面的最底部,您将看到哪些扩展正在占用您的内存。尽管在大多数安装中11Mb是可以接受的。
  3. 如果要使用输入参数创建WHERE条件,只需确保$ db-> quote()任何值都可以防止SQL注入。
2021-07-01