yii2中的createCommand()函数返回false值

时间:2015-04-20 12:24:28

标签: php mysql yii2

我已经创建了一个函数'UpdateSysAcc()'来更新yii2模型中的db表行:

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]);
            }
        } 
    }
}

现在上面代码的问题是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;

3 个答案:

答案 0 :(得分: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();        
    }

答案 1 :(得分:1)

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

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

现在我找到了这个问题的原因,即

如果成功执行查询后mysql将返回0 rows affected作为返回值,而createCommand()函数将返回值FALSE,但如果某些行受​​查询执行影响,比createCommand()将值TRUE返回。

再次感谢@AbhikChakraborty和@ vitalik_74。

答案 2 :(得分:0)

$result = 0;
$argument = 'mmm';
$sql = "begin :result := package_name.function_name(:argument); end;";
        $request = Yii::$app->db
            ->createCommand($sql)
            ->bindParam( ":argument", $argument )
            ->bindParam(':result', $result,\PDO::PARAM_INPUT_OUTPUT,255)
            ->execute();
echo $result;

Use the oracle function in createCommand