Yii的updateByPk不断返回0

oiopk7p5  于 2022-11-09  发布在  其他
关注(0)|答案(4)|浏览(108)

我试图更新我的用户表,我的代码也是这样做的。但是由于某种原因,它一直在执行else语句。
在文档中,它声明updateByPk应该返回正在更新的行数。它应该是1。我在这里遗漏了什么?我如何检查表是否已经成功更新?

if (User::model()->updateByPk($model->id, array("last_login"=> Shared::timeNow())))
{
    Yii::app()->user->login($identity, $duration);
    echo json_encode(array('error' => false, 'success' => url(app()->users->getHomeUrl())));
    Yii::app()->end();
} 
else {
    echo json_encode(array('error' => 'Could not update user info', 'code' => 'auth'));
    Yii::app()->end();
}

我表模式是这样的

CREATE TABLE IF NOT EXISTS `user` (
`id` int(10) unsigned NOT NULL,
  `username` varchar(100) DEFAULT NULL,
  `email` varchar(255) NOT NULL,
  `first_name` varchar(45) NOT NULL,
  `last_name` varchar(45) NOT NULL,
  `gender` char(1) DEFAULT NULL,
  `birthday` date DEFAULT '0000-00-00',
  `address` varchar(255) DEFAULT NULL,
  `city` varchar(45) DEFAULT NULL,
  `state` varchar(45) DEFAULT NULL,
  `website` text,
  `postal_code` varchar(45) DEFAULT NULL,
  `phone` varchar(45) DEFAULT NULL,
  `password` varchar(63) DEFAULT NULL,
  `activate` varchar(63) NOT NULL DEFAULT '1',
  `create_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `last_login` datetime DEFAULT NULL,
  `password_reset` int(11) unsigned DEFAULT NULL,
  `admin` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `email_verified` tinyint(1) unsigned DEFAULT NULL,
  `login_disabled` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `oauth_id` bigint(20) DEFAULT NULL,
  `oauth_username` varchar(255) DEFAULT NULL,
  `oauth_provider` varchar(10) DEFAULT NULL,
  `oauth_email` varchar(255) DEFAULT NULL
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
wooyq4lh

wooyq4lh1#

您应该先检查$model exits,否则updateByPk可能会返回0

if ($model && User::model()->updateByPk($model->id, array("last_login"=> Shared::timeNow())))
brjng4g3

brjng4g32#

您的表没有指定主键。但您按主键进行更新。
你有几个选择。

  • 更改表结构以包含主键
  • 使用另一个更新方法。例如,Update()允许您传递条件对象。
ckx4rj1h

ckx4rj1h3#

明知道是陈年旧事,却道:https://www.php.net/manual/en/pdostatement.rowcount.php
如果关联的PDOStatement执行的最后一个SQL语句是SELECT语句,则某些数据库可能会返回该语句返回的行数。但是,此行为并不保证适用于所有数据库,并且不应依赖于可移植应用程序。
和Yii1使用rowCount

yshpjwxd

yshpjwxd4#

无法更新模型,因为last_login属性没有有效值。请尝试获取模型错误($model->errors())或按$model->validate();检查模型
为什么不按如下方式实现:

$model->last_login = Shared::timeNow();
if ($model->save())
{
    Yii::app()->user->login($identity, $duration);
    echo json_encode(array('error' => false, 'success' => url(app()->users->getHomeUrl())));
    Yii::app()->end();
} 
else {
    echo json_encode(array('error' => 'Could not update user info', 'code' => 'auth'));
    Yii::app()->end();
}

相关问题