2015-04-20 93 views
1

我做了一个函数 'UpdateSysAcc()' 在yii2模型更新数据库表的行:createCommand()函数返回值为false

profile.php

namespace app\models; 

use yii\db\ActiveRecord; 
use Yii; 
use yii\base\Model; 
use app\models\Location; 

class Profile extends ActiveRecord { 

    public $Fname; 
    public $Lname; 
    public $Password; 
    public $Mail; 
    public $Mobile; 

public static function db() { 
     $db = new \yii\db\Connection([ 
      'dsn' => 'mysql:host=localhost;dbname=cms', 
      'username' => 'root', 
      'password' => '', 
      'charset' => 'utf8', 
     ]); 
     return $db; 
    } 

public function UpdateSysAcc($model) { 

     echo $this->db()->createCommand("UPDATE `cms_profile` SET `UserName`='$model->Fname $model->Lname',`Mobile1`=$model->Mobile,`Mail`='$model->Mail',`ProfileImg`='db.jpg' WHERE `Mail`='$this->Mail'")->execute();   
    } 
} 

控制器文件对于上述模型是:

ProfileController.php

namespace app\controllers; 

use yii; 
use yii\web\Controller; 
use app\models\Profile; 
use app\models\Location; 

class ProfileController extends Controller { 

    public function actionIndex() { 
     $model = new Profile; 
     $obj = new Location; 

     if ($model->load(\Yii::$app->request->post())) { 
      if ($model->UpdateSysAcc($model)) { 
       return $this->render('index', ['model' => $model, 'obj' => $obj]); 
      } else { 
       return $this->render('index', ['model' => $model, 'obj' => $obj]); 
      } 
     } 
    } 
} 

现在ABOV问题e代码是UpdateSysAcc()模型函数中的UPDATE QUERY成功更新表数据,但createCommand()返回false值。

任何人都可以帮助我在这种情况下这个代码有什么问题?对于db表

数据库架构如下:

CREATE TABLE IF NOT EXISTS `cms_profile` (
`Id` int(4) NOT NULL, 
    `SysUniqueId` varchar(50) NOT NULL, 
    `UserName` varchar(30) NOT NULL, 
    `Dob` date NOT NULL, 
    `LastActivity` datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP, 
    `Mobile1` varchar(15) NOT NULL, 
    `Mobile2` varchar(15) NOT NULL, 
    `Mail` varchar(50) NOT NULL, 
    `ProfileImg` varchar(50) NOT NULL, 
    `DrName` varchar(50) NOT NULL, 
    `DrMobile` varchar(15) NOT NULL 
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1; 
+0

使用从PHP端或MySQL端的concat作为用户名,这里是mysql的方式'UserName = concat('$ model-> Fname,'','$ model-> Lname')' –

+0

它的工作原理:D 谢谢bro –

+0

'$ this-> db() - > createCommand(“UPDATE'cms_systemregister' SET'Fname' ='$ model-> Fname','Lname' ='$ model-> Lname','Mobile' = $ model - > Mobile,'Mail' ='$ model-> Mail','password' ='$ model-> Password'WHERE'Mail' ='$ this-> Mail'“) - > execute();' @AbhikChakraborty - 这个命令也发生同样的问题...... 我用这个createCommand()重复的错误是什么? –

回答

1

变化UpdateSysAcc删除echo并添加return,像

public function UpdateSysAcc($model) { 

     return $this->db()->createCommand("UPDATE `cms_profile` SET `UserName`='$model->Fname $model->Lname',`Mobile1`=$model->Mobile,`Mail`='$model->Mail',`ProfileImg`='db.jpg' WHERE `Mail`='$this->Mail'")->execute();   
    } 
+0

谢谢! @ vitalik_74,但这个问题是通过@ AbhikChakraborty的回答解决的。 现在返回FALSE的相同问题再次发生在同一'createCommand()'函数中的另一个查询中,即 '$ this-> db() - > createCommand(“UPDATE cms_systemregister SET Fname ='$ model-> Fname ',Lname ='$ model-> Lname',Mobile ='$ model-> Mobile',Mail ='$ model-> Mail',password ='$ model-> Password'WHERE Mail ='$ this-> Mail '“) - > execute();' –

1

在这里我找到了上述问题声明的答案。

是的,我做了一些语法错误,但解决之后,问题仍然存在,createCommand()返回FALSE值,甚至执行查询时没有任何来自SQL方面的错误。

现在我发现,问题的原因,即

如果MySQL甚至会比createCommand()函数将返回值FALSE但如果有受影响某些行的查询执行成功后返回0 rows affected作为返回值查询执行,比createCommand()将返回值为TRUE

再次感谢@AbhikChakraborty和@ vitalik_74。