PHP MySQL Yii-数据库读取而不是写入

PHP MySQL Yii-数据库读取而不是写入,php,mysql,yii,lamp,Php,Mysql,Yii,Lamp,我的本地灯组上有一个正在工作的Yii应用程序。现在,当我将应用程序放在lamp服务器上时,应用程序读取数据库并运行,但应用程序未成功写入数据库。我没有收到错误日志。有什么想法吗 下面是我如何更新数据库的: public function actionIndex() { if ($_GET["yep"] == "") { pd_error("You are not logged in!"); } list($uid, $domain) = preg_split(

我的本地灯组上有一个正在工作的Yii应用程序。现在,当我将应用程序放在lamp服务器上时,应用程序读取数据库并运行,但应用程序未成功写入数据库。我没有收到错误日志。有什么想法吗

下面是我如何更新数据库的:

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没有更新登录计数和上次登录,用户仍然会被重定向到他们的url,因此sql必须有效,因为通知页面从未加载。有什么想法吗

更新+解决方案 问题是mysql服务器的autocommit设置为false。要在应用程序级别覆盖此设置,请在config/main.php db数组中添加以下行:

'db'=>array(
    ...
    'initSQLs'=>array('SET AUTOCOMMIT=1',),
    ...
);

呈现
注意
页面不会停止重定向。它可能会被渲染,但由于重定向,您将无法看到它。试着重构你的代码

  • 您正在验证模型两次,可能会跳过验证,因为没有来自应用程序用户的数据
  • 您不会检查是否实际找到了
    人员
    模型
  • 有一个
    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');
    }       
}

您是否确保db用户有权对相关数据库和表进行更新/插入/删除?是的,数据库用户拥有这些权限您如何向数据库写入?有代码片段吗?验证没有成功,通知页不会呈现吗?因为它没有呈现,所以页面get被重定向到model->url,感谢您指出它进行了两次验证,但这并没有修复它