У меня есть работающее приложение Yii на моем местном стеке ламп. Теперь, когда я помещаю приложение на сервер лампы, приложение читает db и запускается, но приложение не успешно записывает в db. У меня нет журналов ошибок. Есть предположения?
Вот как я обновляю db:
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('Ymd H:i:s'); if ($model->validate()) { $model->save(); } else { $this->render('notice'); } return $model; }
Странно, даже когда db не обновляет Login_Count и Last_Logged, пользователь по-прежнему перенаправляется на свой URL-адрес, поэтому sql должен быть действительным, потому что страница уведомления никогда не загружается. Есть предположения?
Проблема заключалась в том, что на сервере mysql была установлена автокомбинация на false. Чтобы переопределить это на уровне приложения, добавьте следующую строку в массив config / main.php db:
'db'=>array( ... 'initSQLs'=>array('SET AUTOCOMMIT=1',), ... );
Yii: использование активной записи с отключением autocommit на сервере mysql
Отправка страницы 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('Ymd H:i:s'); if ($model->save()) { $this->redirect($model->URL."?".$model->Unique_ID); } else { // echo CHtml::errorSummary($model) $this->render('notice'); } }