Php 数据库连接在Yii cronjob中不工作
我遵循Yii通过调用命令(在CLI(控制台)模式下运行PHP)来配置作业。 cron作业按设计工作,但是当我处理AR模型或查询SQL时,脚本/命令不起作用 我已经在config/cron.php中设置了DB连接:Php 数据库连接在Yii cronjob中不工作,php,mysql,database,yii,cron,Php,Mysql,Database,Yii,Cron,我遵循Yii通过调用命令(在CLI(控制台)模式下运行PHP)来配置作业。 cron作业按设计工作,但是当我处理AR模型或查询SQL时,脚本/命令不起作用 我已经在config/cron.php中设置了DB连接: ... 'components'=>array( ... 'db'=>array( 'connectionString' => 'mysql:host=localhost;dbname=blogandt_yiiapp',
...
'components'=>array(
...
'db'=>array(
'connectionString' => 'mysql:host=localhost;dbname=blogandt_yiiapp',
//mysql:host=127.0.0.1;port=3306;
'emulatePrepare' => true,
'username' => '...',
'password' => '..',
'charset' => 'utf8',
'tablePrefix' => 'yiiapp_',
'class' => 'CDbConnection'
),
),
TestCommand.php:
<?php
class TestCommand extends CConsoleCommand {
public function run($args) {
$dateObj = new DateTime('NOW'); //date("Y-m-d");
$fromTime = date_format($dateObj, "Y-m-d H:m:i");
date_modify($dateObj, '+5 days');
$toTime = date_format($dateObj, "Y-m-d H:m:i");
$message = "Time span is from {$fromTime} to {$toTime} ";
mail('xyz@gmail.com', 'TestCommand run', $message, '');
$criteria = new CDbCriteria;
$criteria->addBetweenCondition('time', $fromTime, $toTime);
$notification = DocEventNotification::model()->findAll($criteria);
// OR
//$query = 'SELECT n.UserId, n.EventId FROM yiiapp_doc_event_notification n';
//$query .= "WHERE (n.time BETWEEN '{$fromTime}' AND '{$toTime}') AND n.turn = '1' ";
//$rows = Yii::app()->db->createCommand($query)->queryAll();
mail('xyz@gmail.com', 'TestCommand after DB query', $message, '');
}
} ?>
我在配置Yii时没有包括PDO支持。
解决方案是什么?可能是连接问题。在n之后缺少一个空格
$query = 'SELECT n.UserId, n.EventId FROM yiiapp_doc_event_notification n ';
$query .= "WHERE (n.time BETWEEN '{$fromTime}' AND '{$toTime}') AND n.turn = '1' ";
尝试告诉我们发生了什么。尝试手动执行并查看错误!如果共享主机不允许shell访问,我如何执行命令?可能是
DocEventNotification
model类正如我在问题中所说的,我已经成功地尝试从controller/action中的DocEventNotification
model类获取记录。(同一代码)。所以,我无法找出一个问题…您可以在某个控制器中以这种方式尝试exec命令:$com=TestCommand$com->run(array())代码>。或者,你可能会看到cron脚本的日志,我做了这件事却没有结果。实际上在此之前,我已经对第二行$query.=…
$query = 'SELECT n.UserId, n.EventId FROM yiiapp_doc_event_notification n ';
$query .= "WHERE (n.time BETWEEN '{$fromTime}' AND '{$toTime}') AND n.turn = '1' ";