Заявката за Joomla очевидно се изпълнява повече от веднъж

Имам компонент за отчитане в администратора на сайт на Joomla. Потребителят може да избира от падащ списък с налични типове отчети, които след това извикват функция за изпълнение на заявката и извеждане на CSV файл. В по-голямата си част това работи. За един отчет обаче получавам различен брой резултати чрез функцията на Joomla, отколкото ако изпълня заявката директно в mySQL. Добавих error_log, за да видя какво се случва, и изглежда, че заявката се изпълнява два пъти. (Може би.)

Ето кода, който извиква функцията:

function getFullRedeemActivity($start, $end){

    return getReportFullRedeemActivityByDate("v.UpdateDT", strtotime($start),strtotime($end));

}

$start и $end се предават; няма проблеми там. Проблемът е във функцията getReportFullRedeemActivityByDate. Ето кода за това:

function getReportFullRedeemActivityByDate($start, $end, $limitStart=null, $limitRows=null){
    //open db
    $db =& JFactory::getDBO();
    $where = ($low && $high) ? " and v.UpdateDT between ".$db->quote($low)." and ".$db->quote($high) : "";
     $sort = "v.UpdateDT";
     $limit = (is_int($limitStart) && is_int($limitRows)) ? " limit ".$db->quote($limitstart).", ".$db->quote($limitRows) : "";

    //set query
    $query = "select    r.RedeemAmt,
            v.VoucherNbr, v.BalanceInit, v.UpdateDT, v.BalanceCurrent, 
    m.SkuAbbr, m.MerchantNm,
    a.name,  a.email, a.company, a.address1, a.address2, a.city, a.state, a.zip, a.phone

            from arrc_RedeemActivity r
            left outer join arrc_Voucher v on v.VoucherID = r.VoucherID
            left outer join arrc_Merchant m on m.MerchantID = r.MerchantID
            left outer join jos_customers_addresses a on a.id = r.AcctID
           {$where} 
            order by {$sort} {$limit}";

    $db->setQuery($query);
    if (!$db->query()) error_log($db->stderr());

    if (!$db->getNumRows()){
        JError::raiseWarning( 100, 'No records returned' );
        return false;
    }
    else{
        error_log("there are ". $db->getNumRows()." rows");
    }

    //loop out records into array
    foreach ($db->loadAssocList() as $row){
        $data[$row['BalanceCurrent']] = $row;
        return $data;
    }
}

Когато погледна моя error_log, това, което виждам е:

[Tue Oct 19 09:37:30 2010] [error] [client xxx.xx.xx.xxx] there are 5 rows, referer: http://mysite.com/administrator/index.php?option=com_arrcard&section=reports
[Tue Oct 19 09:37:30 2010] [error] [client xxx.xx.xx.xxx] there are 2 rows, referer: http://mysite.com/administrator/index.php?option=com_arrcard&section=reports

Просто така; един след друг. Като се има предвид, че редът, който го отпечатва, не е в цикъл, не мога да разбера защо очевидно минава през този раздел два пъти.

Някакви идеи?


person EmmyS    schedule 19.10.2010    source източник
comment
Можете да опитате да добавите _SERVER["REQUEST_TIME"] към регистъра на грешките, за да видите дали това е една и съща заявка, в която се правят двете заявки, или дали ресурсът се извиква два пъти   -  person Pekka    schedule 19.10.2010
comment
Ако това са две различни заявки: Най-честата причина, поради която нещо се извиква два пъти, е празна препратка към ресурс, напр. <img src=""> ще се опита да зареди текущата страница в изображението   -  person Pekka    schedule 19.10.2010
comment
ОК, открих къде беше част от проблема след добавяне на време за заявка: има две отделни места, където се отпечатваше този ред - едно в действителната функция, където се изпълняваше заявката, и веднъж във функцията, където бяха върнати данните от заявката да се. Така че, очевидно това е редът foreach, който причинява проблема, тъй като получавам правилния rownum преди това, но масивът, върнат като $data, няма правилния брой елементи.   -  person EmmyS    schedule 19.10.2010


Отговори (1)


Оказва се, че не всички върнати записи са имали стойност в колоната BalanceCurrent, така че когато foreach удари този ред:

 $data[$row['BalanceCurrent']] = $row;

не създаваше ред за тези записи. Превключих името на полето към една от колоните с id, които определено имат всички редове, и всичко е наред.

person EmmyS    schedule 19.10.2010