我已经创建了一个函数'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;
答案 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