我的本地灯具上有一个可用的Yii应用程序。现在,当我将应用程序放在灯泡服务器上时,应用程序将读取数据库并运行,但应用程序未成功写入数据库。我没有错误日志。有什么想法吗?
以下是我如何更新数据库:
public function actionIndex()
{
if ($_GET["yep"] == "") {
pd_error("You are not logged in!");
}
list($uid, $domain) = preg_split("/@/",$_GET["yep"],2);
$model=$this->loadModel($uid);
$this->redirect($model->URL."?".$model->Unique_ID);
}
public function loadModel($uid)
{
$model=People::model()->findByPk($uid);
$model->Login_Count++;
$model->Last_Logged=date('Y-m-d H:i:s');
if ($model->validate()) {
$model->save();
} else {
$this->render('notice');
}
return $model;
}
奇怪的是,即使db没有更新Login_Count和Last_Logged,用户仍然会被重定向到他们的url,所以sql必须是有效的,因为通知页面永远不会加载。有什么想法吗?
问题最终是mysql服务器将autocommit设置为false。要在应用级别覆盖此项,请将以下行添加到config / main.php db数组中:
'db'=>array(
...
'initSQLs'=>array('SET AUTOCOMMIT=1',),
...
);
Yii: using active record with autocommit off on mysql server
答案 0 :(得分:0)
notice
页面的呈现不会阻止您的重定向。它可能会被渲染,但由于重定向,您将无法看到它。尝试重构代码。
People
型号。CWebUser::afterLogin
方法来执行此类操作(更新登录计数和上次登录日期)也许这种方式(快速修复)可行:
function actionIndex()
{
if ($_GET["yep"] == "") {
pd_error("You are not logged in!");
}
list($uid, $domain) = preg_split("/@/",$_GET["yep"],2);
if (null === ($model=People::model()->findByPk($uid))
throw new CHttpException(404);
$model->Login_Count++;
$model->Last_Logged=date('Y-m-d H:i:s');
if ($model->save()) {
$this->redirect($model->URL."?".$model->Unique_ID);
} else {
// echo CHtml::errorSummary($model)
$this->render('notice');
}
}