繁体   English   中英

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

[英]Close session after executing database query

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

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

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

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注入。

尝试

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

1。

UNCOOL:

如果要关闭或断开数据库会话,可以使用:

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

但是我想,每个其他要使用JFactory :: getDBO();的模块,插件或模板的数据库连接; 也会关闭,然后需要重新打开。

更好:

将查询转移到PHP变量后,您应该改用FREE RESULT: http : //api.joomla.org/cms-3/classes/JDatabaseDriverMysql.html#method_freeResult

$db->freeResult();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM