我试图更新我的用户表,我的代码也是这样做的。但是由于某种原因,它一直在执行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 ;
4条答案
按热度按时间wooyq4lh1#
您应该先检查$model exits,否则updateByPk可能会返回0
brjng4g32#
您的表没有指定主键。但您按主键进行更新。
你有几个选择。
ckx4rj1h3#
明知道是陈年旧事,却道:https://www.php.net/manual/en/pdostatement.rowcount.php
如果关联的PDOStatement执行的最后一个SQL语句是SELECT语句,则某些数据库可能会返回该语句返回的行数。但是,此行为并不保证适用于所有数据库,并且不应依赖于可移植应用程序。
和Yii1使用rowCount
yshpjwxd4#
无法更新模型,因为
last_login
属性没有有效值。请尝试获取模型错误($model->errors()
)或按$model->validate();
检查模型为什么不按如下方式实现: