我有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个问题,
- 当我查询数据库,一个新的数据库会话被打开,我需要后,关闭或是自动的?
- 你知道的更有效的方式来实现这一方法(用户会话内存大小为11MB左右!)
- 是否有与访问使用这种方法的数据库中的任何安全问题?
非常感谢你! 任何帮助将是非常赞赏!
该代码应该是这样的(我看不出它如何能够现在的工作):
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和下文)
- 您不必将其关闭
- 11MB不一定是由于该查询,尝试添加限制0,1(只返回一个行),你会看到你的记忆并没有太大变化。 打开调试在全局配置,并重新加载组件。 你会看到页面最底部其扩展吃了你的记忆。 11MB是可以接受的,虽然在大多数安装。
- 如果你创建你的WHERE使用输入PARAMS状态,只要确保你$ DB->报价()的任何值,以防止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。
酷:
如果你想关闭或关闭数据库连接的会话,你可以使用:
$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();