joomla 在一个函数中使用多个数据库查询

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 连接使用相同的变量,只要它的顺序正确,一切都很好。

两个问题:

  1. 这是正确的吗?或者有没有更好的方法来做到这一点?
  2. 我需要检查 mysql 失败loadResult吗?我该怎么办。查看 Joomla 核心时,我通常什么也看不到,但有时需要处理多种情况。

Mar*_*o D 5

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+ 开始抛出警告