PHP MySQL Yii - чтение базы данных не запись

У меня есть рабочее приложение 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;
}

Странно то, что даже когда БД не обновляет Login_Count и Last_Logged, пользователь все равно перенаправляется на свой URL, поэтому sql должен быть действительным, потому что страница уведомлений никогда не загружается. Какие-нибудь мысли?

Обновление + Решение

В итоге проблема заключалась в том, что для сервера mysql было установлено автоматическое принятие значения false. Чтобы переопределить это на уровне приложения, добавьте следующую строку в массив config / main.php db:

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

Yii: использование активной записи с отключенной автоматической фиксацией на сервере MySQL

1 ответ

Оказание 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');
    }       
}
Другие вопросы по тегам