【问题标题】:echo full joomla query (with limit etc)?回显完整的 joomla 查询(有限制等)?
【发布时间】:2012-03-07 00:46:42
【问题描述】:

我想知道是否有办法用 limit 和 limitstart 等来回显完整的查询。我可以回显 $query 行,但我想看看为什么限制不起作用,我似乎看不到让它显示它发送到数据库的实际查询。这是代码:

$params =& JComponentHelper::getParams('com_news');
$limit = $params->get('x_items', 5);
$limitstart = JRequest::getVar('limitstart', 0);

$query = "SELECT * FROM #__news WHERE published = 1 AND catid = ".$Itemid." ORDER BY date DESC";
$db->setQuery($query, $limitstart, $limit);
$rows = $db->loadObjectList();

$db->getQuery($query, $limitstart, $limit);仅显示“SELECT * FROM jos_news WHERE published = 1 AND catid = 8 ORDER BY date DESC”,在查询结束时没有 LIMIT 参数。

任何帮助将不胜感激:)

【问题讨论】:

    标签: php joomla1.5


    【解决方案1】:

    JDatabaseQuery 对象有一个__toString() 函数,用于输出查询,因此您可以:

    echo $db->getQuery();
    

    或者如果你想将它传递给一个函数,你可以先将它显式地转换为一个字符串:

    var_dump((string)$db->getQuery());
    

    【讨论】:

    • 这应该是公认的答案。效果很好,这正是它被开发的原因(我想)。
    【解决方案2】:
    var_dump($db);die;
    

    loadObjectList() 调用之后执行此操作。在$db 变量中必须有一个_sql 属性,它是最后执行的查询。

    【讨论】:

      【解决方案3】:

      同意前面的答案,但是...如果您正在开发自己的组件,因为我也经常想确定究竟执行了什么,这里有一个简单的解决方案:

      在你的模型中放置:

      $db = JFactory::getDBO(); echo $db->getQuery();

      您想知道查询的位置...不要将其放在(例如)您的视图中,因为它可能同时通过执行加载了一些其他下拉列表...

      例如:

      对于列表视图,将其放在模型的公共函数 getItems() 中的 foreach ($items... 之前。 在表单/项目视图中,将其放在受保护函数 loadFormData() / public function getItem($pk = null) 中的 return $data / return $item 之前

      希望这会有所帮助...

      【讨论】:

        【解决方案4】:

        在新的 joomla 版本上,您需要在查询对象上回显 __toString()。

        echo $query->__toString();
        

        我在this joomla answer 上获得此信息。

        希望对你有帮助

        【讨论】:

          猜你喜欢
          • 2018-04-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-10-25
          • 1970-01-01
          • 2013-06-07
          相关资源
          最近更新 更多