joomla 2.5 数据库没有收到查询?
joomla 2.5 database not receiving queries?
我有 php 功能,可以使用数据库中的模板向用户发送电子邮件。问题是最后 3 个查询不起作用(我从 phpmyadmin 试过,它工作正常)。代码执行,没有错误,但没有获得视图和回复的数量,而是空的 space (db->loadobjectlist returns null?) 并且最后的更新查询也没有做任何事情。
这是最后发送的内容
请帮助我理解这段代码有什么问题
$config = JFactory::getConfig();
$mailfrom = $config->get('mailfrom');
$fromname = $config->get('sitename');
$dbprefix = $config->getValue('config.dbprefix');
$database = JFactory::getDBO();
$query = "select u.id, u.email
from ".$dbprefix."users as u
left join ".$dbprefix."djcf_items as i on u.id=i.user_id and i.published=1
where u.sendEmail=1 and TIMESTAMPDIFF(hour,NOW(), u.WeeklyAD)=0
having count(i.id)>0";
$database->setQuery($query);
$users = $database->loadObjectList();
$template_name = 'Weekly ad';
$template_table = 'Weekly table';
$subject = 'Ads Peformance Update';
$template_main = getTemplate($template_name);
$template_table = getTemplate($template_table);
foreach($users as $user){
$query = "select id, name, image_url, alias, timestampdiff(day, date_start, now()) as days_live
from ".$dbprefix."djcf_items
where user_id = ".$user->id." and published=1";
$database->setQuery($query);
$items = $database->loadObjectList();
$template = $template_main;
foreach($items as $item){
$query = "select count(distinct v.user) as overall, count(distinct vw.user) as week
from ".$dbprefix."visitors as v
left join ".$dbprefix."visitors as vw on vw.name=v.name and timestampdiff(hour, vw.date, now())<=7*24
where v.name='".$item->alias.$item->id."'";
$database->setQuery($query);
$views = $database->loadObjectList();
$query = "select count(distinct ia.id) as overall, count(distinct iaw.id) as week
from ".$dbprefix."djcf_itemsask as ia
left join ".$dbprefix."djcf_itemsask as iaw on iaw.id=ia.item_id and timestampdiff(hour, iaw.date, now())<=7*24
where ia.item_id=".$item->id;
$database->setQuery($query);
$replies = $database->loadObjectList();
$table .= $template_table;
$imagelink = explode(';',$item->image_url);
$imagelink = 'http://'.$_SERVER['HTTP_HOST'].'/components/com_djclassifieds/images/'.$imagelink[0];
$table = str_replace("##ITEM_NAME##", $item->name, $table);
$table = str_replace("##DAYS##", $item->days_live, $table);
$table = str_replace("##VIEWS##", $views->overall, $table);
$table = str_replace("##VIEWS_WEEK##", $views->week, $table);
$table = str_replace("##REPLIES##", $replies->overall, $table);
$table = str_replace("##REPLIES_WEEK##", $replies->week, $table);
$table = str_replace("##ITEM_IMG##", $imagelink, $table);
}
$template = str_replace("##WEEKLY_TABLE##", $table, $template);
SendEmail($mailfrom, $fromname, $user->email, $subject, $template);
$query = "update ".$dbprefix."users set WeeklyAD=ADDDATE(WeeklyAD, interval 7 day) where id='".$user->id."'";
$database->setQuery($query);
}
您可能在 select 查询中使用了错误的函数,因为 loadObjectList()
returns 是 table 中 PHP 个对象的索引数组查询返回的记录。要使用此功能,您可以使用以下方式访问各个值:
$row['index']->name // e.g. $row['2']->email
对于单行结果,使用 loadObject()
其中 returns 来自 table 中单个记录的 PHP 对象。这与您的代码匹配,因为您将使用以下方式访问各个值:
$result->index // e.g. $result->email
最终更新查询未执行,因为您缺少 execute()
。
$query = "update ".$dbprefix."users set WeeklyAD=ADDDATE(WeeklyAD, interval 7 day) where id='".$user->id."'";
$database->setQuery($query);
$result = $database->execute();
我有 php 功能,可以使用数据库中的模板向用户发送电子邮件。问题是最后 3 个查询不起作用(我从 phpmyadmin 试过,它工作正常)。代码执行,没有错误,但没有获得视图和回复的数量,而是空的 space (db->loadobjectlist returns null?) 并且最后的更新查询也没有做任何事情。
这是最后发送的内容
请帮助我理解这段代码有什么问题
$config = JFactory::getConfig();
$mailfrom = $config->get('mailfrom');
$fromname = $config->get('sitename');
$dbprefix = $config->getValue('config.dbprefix');
$database = JFactory::getDBO();
$query = "select u.id, u.email
from ".$dbprefix."users as u
left join ".$dbprefix."djcf_items as i on u.id=i.user_id and i.published=1
where u.sendEmail=1 and TIMESTAMPDIFF(hour,NOW(), u.WeeklyAD)=0
having count(i.id)>0";
$database->setQuery($query);
$users = $database->loadObjectList();
$template_name = 'Weekly ad';
$template_table = 'Weekly table';
$subject = 'Ads Peformance Update';
$template_main = getTemplate($template_name);
$template_table = getTemplate($template_table);
foreach($users as $user){
$query = "select id, name, image_url, alias, timestampdiff(day, date_start, now()) as days_live
from ".$dbprefix."djcf_items
where user_id = ".$user->id." and published=1";
$database->setQuery($query);
$items = $database->loadObjectList();
$template = $template_main;
foreach($items as $item){
$query = "select count(distinct v.user) as overall, count(distinct vw.user) as week
from ".$dbprefix."visitors as v
left join ".$dbprefix."visitors as vw on vw.name=v.name and timestampdiff(hour, vw.date, now())<=7*24
where v.name='".$item->alias.$item->id."'";
$database->setQuery($query);
$views = $database->loadObjectList();
$query = "select count(distinct ia.id) as overall, count(distinct iaw.id) as week
from ".$dbprefix."djcf_itemsask as ia
left join ".$dbprefix."djcf_itemsask as iaw on iaw.id=ia.item_id and timestampdiff(hour, iaw.date, now())<=7*24
where ia.item_id=".$item->id;
$database->setQuery($query);
$replies = $database->loadObjectList();
$table .= $template_table;
$imagelink = explode(';',$item->image_url);
$imagelink = 'http://'.$_SERVER['HTTP_HOST'].'/components/com_djclassifieds/images/'.$imagelink[0];
$table = str_replace("##ITEM_NAME##", $item->name, $table);
$table = str_replace("##DAYS##", $item->days_live, $table);
$table = str_replace("##VIEWS##", $views->overall, $table);
$table = str_replace("##VIEWS_WEEK##", $views->week, $table);
$table = str_replace("##REPLIES##", $replies->overall, $table);
$table = str_replace("##REPLIES_WEEK##", $replies->week, $table);
$table = str_replace("##ITEM_IMG##", $imagelink, $table);
}
$template = str_replace("##WEEKLY_TABLE##", $table, $template);
SendEmail($mailfrom, $fromname, $user->email, $subject, $template);
$query = "update ".$dbprefix."users set WeeklyAD=ADDDATE(WeeklyAD, interval 7 day) where id='".$user->id."'";
$database->setQuery($query);
}
您可能在 select 查询中使用了错误的函数,因为 loadObjectList()
returns 是 table 中 PHP 个对象的索引数组查询返回的记录。要使用此功能,您可以使用以下方式访问各个值:
$row['index']->name // e.g. $row['2']->email
对于单行结果,使用 loadObject()
其中 returns 来自 table 中单个记录的 PHP 对象。这与您的代码匹配,因为您将使用以下方式访问各个值:
$result->index // e.g. $result->email
最终更新查询未执行,因为您缺少 execute()
。
$query = "update ".$dbprefix."users set WeeklyAD=ADDDATE(WeeklyAD, interval 7 day) where id='".$user->id."'";
$database->setQuery($query);
$result = $database->execute();