2015-04-20 91 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。