无法将SQL语句转换为Joomla格式

时间:2014-03-21 14:03:57

标签: php mysql sql joomla sql-order-by

以下是适合我的SQL声明:

SELECT inl_cbsubs_subscriptions.user_id, inl_cbsubs_payment_items.subscription_id, inl_cbsubs_payment_items.stop_date, inl_cbsubs_payment_items.id FROM inl_cbsubs_subscriptions INNER JOIN inl_cbsubs_payment_items ON inl_cbsubs_subscriptions.id=inl_cbsubs_payment_items.subscription_id WHERE inl_cbsubs_subscriptions.user_id=596 ORDER BY id DESC LIMIT 1;

这是我尝试为Joomla格式化相同的查询:

$db2 = JFactory::getDbo();
$stopDateQuery = $db2->getQuery(true);

$stopDateQuery->select($db2->quoteName(array('#__cbsubs_subscriptions.user_id', '#__cbsubs_payment_items.subscription_id', '#__cbsubs_payment_items.stop_date')));
$stopDateQuery->from($db2->quoteName('#__cbsubs_subscriptions'));
$stopDateQuery->innerJoin($db->quoteName('#__cbsubs_payment_items') . ' ON #__cbsubs_subscriptions.id = #__cbsubs_payment_items.subscription_id');
$stopDateQuery->where($db2->quoteName('#__cbsubs_subscriptions.user_id')." = ".$db2->quote($myId));
$stopDateQuery->ORDER BY($db2->quoteName('#__cbsubs_payment_items.id'));
$stopDateQuery->DESC LIMIT 1;

我已经测试了Joomla格式,如果删除最后两行,可以让它工作:

$stopDateQuery->ORDER BY($db2->quoteName('#__cbsubs_payment_items.id'));
$stopDateQuery->DESC LIMIT 1;

这告诉我格式化问题在该位置。我需要在查询中添加这些额外的过滤器,那么我在哪里出错呢?

2 个答案:

答案 0 :(得分:0)

尝试使用以下(适用于Joomla 3.x +)

$stopDateQuery->order($db2->quoteName('#__cbsubs_payment_items.id') . 'DESC');
$stopDateQuery->setLimit(1);

如果您使用的是Joomla 2.5,请使用此设置限制

$db2->setQuery($stopDateQuery,0,1);  

答案 1 :(得分:0)

只要无法进行sql注入,您就可以这样做:

$stopDateQuery = "SELECT inl_cbsubs_subscriptions.user_id, inl_cbsubs_payment_items.subscription_id, inl_cbsubs_payment_items.stop_date, inl_cbsubs_payment_items.id FROM inl_cbsubs_subscriptions INNER JOIN inl_cbsubs_payment_items ON inl_cbsubs_subscriptions.id=inl_cbsubs_payment_items.subscription_id WHERE inl_cbsubs_subscriptions.user_id=596 ORDER BY id DESC LIMIT 1";

它的运行速度也快一点。

如果可以进行sql注入,那么可以使用

$db2->quoteName($id)