TP5使用模型更新timestamp数据无效(要更新的字段为last_login_time,初始值为0000-00-00 00::00:00),无任何报错,sql语句没错。
以下是控制器的代码:
public function checkLogin(Request $request)
{
try {
$username = $request->param('username');
$user = UserModel::get(['username'=>$username]);
//$user = \app\market\model\User::getByUserName($request->param('username'));
//判断尝试登陆attempt的次数
if($user->attempt>6)
{
$arr2 = ['message'=>'由于尝试太过频繁,请稍后再尝试登陆'];
echo json_encode($arr2);
return ;
}
if ($request->param('password') == $user->password) {
$_SESSION['user'] = $user;
$newTime = date('Y-m-d H: i: s');
$arr = ['message' => '登陆成功','resp'=>TRUE,'last_login_time'=>$newTime];
//记录当前登录的时间
$user->last_login_time = $newTime;
$user->save();
echo json_encode($arr);
return ;
} else {
$arr = ['message' => '错误的用户名或密码'];
echo json_encode($arr);
//更新数据库attempt的值
return ;
}
} catch(\Exception $e)
{
$this->error('错了哦');
}
}
以下是模型部分代码:
class User extends Model
{
protected $name = 'user';
protected $type = [
'create_time' => 'timestamp:Y/m/d',
];
}
以下是日志sql的代码:
[ 2017-08-04T21:49:09+08:00 ] ::1 ::1 POST /tp5/public/market/user/checklogin.html
[ sql ] [ DB ] CONNECT:[ UseTime:0.001628s ] mysql:dbname=market;host=127.0.0.1;port=3306;charset=utf8
[ sql ] [ SQL ] SHOW COLUMNS FROM market_user
[ RunTime:0.006668s ]
[ sql ] [ SQL ] SELECT * FROM market_user
WHERE username
= 'admin' LIMIT 1 [ RunTime:0.000512s ]
[ sql ] [ SQL ] UPDATE market_user
SET last_login_time
='2017-08-04 21: 49: 09' WHERE id
= 1 [ RunTime:0.000488s ]
以下是数据库创建代码:
CREATE TABLE market_user
(
id int NOT NULL AUTO_INCREMENT,
username varchar(31) NOT NULL,
password varchar(31) NOT NULL,
create_time timestamp NOT NULL,
last_login_time timestamp NOT NULL,
attempt int NOT NULL,
PRIMARY KEY(id)
)ENGINE=INNODB AUTO_INCREMENT=1 CHARSET=utf8;
先说结论:你定义$newtime的格式错误,$newTime = date('Y-m-d H: i: s'); H:i:s中间不应该有空格。
遇到这个问题可以考虑复制日志中的sql到mysql客户端运行一下。