【问题标题】:PHP MySQL Yii - database reading not writingPHP MySQL Yii - 数据库读取而不是写入
【发布时间】:2012-12-26 15:14:36
【问题描述】:

我的本​​地灯组上有一个可用的 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'=>array(
    ...
    'initSQLs'=>array('SET AUTOCOMMIT=1',),
    ...
);

Yii: using active record with autocommit off on mysql server

【问题讨论】:

  • 你确定你的 db 用户有GRANT 用于更新/插入/删除有问题的数据库和表吗? dev.mysql.com/doc/refman/5.0/en/grant.html#grant-privileges
  • 是的 db 用户拥有这些权限
  • 你是如何写入数据库的?任何代码sn-p?
  • 验证不成功
  • 那么通知页面不会渲染吗?因为它没有渲染,所以页面被重定向到模型->url

标签: php mysql yii lamp


【解决方案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');
    }       
}

【讨论】:

  • 感谢您指出它正在验证两次,但这并没有解决它
猜你喜欢
  • 1970-01-01
  • 2016-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-05
  • 1970-01-01
相关资源
最近更新 更多