Tom*_*Tom 3 php joomla joomla2.5
在某些功能中,我可能需要做一些这样的查询:
$user = & JFactory::getUser();
$db = & JFactory::getDBO();
$query = $db->getQuery(true);
$query->select('id');
$query->from($db->quoteName('#__users'));
$query->where('username='.$db->quote($response->username));
$db->setQuery($query);
$user_id = $db->loadResult();
if ($user_id == "")
{
//do something
}
$query1 = $db->getQuery(true);
$query1->select('app_id');
$query1->from($db->quoteName('#__app_ids'));
$query1->where('app_descr='.$db->quote($this->app_descr).' AND app_valid=TRUE');
$db->setQuery($query1);
$app_id = $db->loadResult();
Run Code Online (Sandbox Code Playgroud)
我发现如果我不更改query为,query1我将无法使其适用于后续查询。在 Joomla 之外,我从来没有这样做过,因为我关闭 mysql 连接使用相同的变量,只要它的顺序正确,一切都很好。
两个问题:
loadResult吗?我该怎么办。查看 Joomla 核心时,我通常什么也看不到,但有时需要处理多种情况。1) 它应该使用相同的变量名,因为您正在获取一个新的查询对象,因为您的方法参数设置为true. 尝试$query->clear();在获取查询对象后立即调用
$query = $db->getQuery(true);
$query->clear();
$query->select('app_id');
Run Code Online (Sandbox Code Playgroud)
2)在Joomla 3中它应该是这样的
try
{
$db->setQuery($query);
$user_id = $db->loadResult();
}
catch (RuntimeException $e)
{
$e->getMessage();
}
Run Code Online (Sandbox Code Playgroud)
在 Joomla 2.5 中
if ($db->getErrorNum()) {
JError::raiseWarning(500, $db->getErrorMsg());
}
Run Code Online (Sandbox Code Playgroud)
还有,改变
$user = & JFactory::getUser();
$db = & JFactory::getDBO();
Run Code Online (Sandbox Code Playgroud)
到
$user = JFactory::getUser();
$db = JFactory::getDBO();
Run Code Online (Sandbox Code Playgroud)
无论如何,在 PHP 5 中对象都是通过引用返回的,并且它会从 php 5.3+ 开始抛出警告