/** * 创建用户 * @route({"POST","/"}) 新建用户 * @param({"account", "$._POST.mobile"}) 手机号,必选 * @param({"password", "$._POST.password"}) 密码,必选 * @param({"alias", "$._POST.alias"}) 昵称,必选 * @param({"avatar", "$._FILES.avatar.tmp_name"}) 头像文件,可选 * @param({"token", "$._COOKIE.token"}) 验证短信验证码后获取的cookie * * @throws({"caoym\util\exceptions\Forbidden","res", "403 Forbidden",{"error":"Forbidden"}}) cookie失效 * * @throws({"AliasConflict","res", "409 Conflict",{"error":"AliasConflict"}}) 昵称冲突 * * @throws({"AccountConflict","res", "409 Conflict",{"error":"AccountConflict"}}) 用户名冲突(手机号冲突) * * @return({"cookie","uid","$uid","+365 days","/"}) uid * @return 返回用户id * {"uid":"1233"} */ public function createUser(&$uid, $token, $account, $alias, $password, $avatar = null) { $tokens = $this->factory->create('Tokens'); $token = $tokens->getToken($token); Verify::isTrue(!$token['uid'], new BadRequest('invalid token')); Verify::isTrue($token['account'] == $account, new Forbidden('invalid mobile ' . $account)); if ($avatar) { $avatar = $this->uploadAvatar($avatar); } else { $avatar = ''; //数据库设置了not null } $pdo = $this->db; $pdo->beginTransaction(); try { //检查账号是否重复(用户名、邮箱、手机号任一一项都不能重复) //由于数据库中已近存在重复记录,所以不能设置数据库的唯一性索引、 $res = Sql::select('uid')->from('uc_members')->where('username = ? OR email = ? OR mobile = ?', $account, $account, $account)->forUpdate()->get($pdo); Verify::isTrue(count($res) == 0, new AccountConflict("account {$account} conflict")); // 昵称 $res = Sql::select('uid')->from('pre_common_member_profile')->where('realname = ?', $alias)->forUpdate()->get($pdo); Verify::isTrue(count($res) == 0, new AliasConflict("alias {$alias} conflict")); $uid = Sql::insertInto('uc_members')->values(['username' => $account, 'password' => $password, 'regdate' => Sql::native('UNIX_TIMESTAMP(now())'), 'salt' => ''])->exec($pdo)->lastInsertId(); Sql::insertInto('pre_common_member_profile')->values(['realname' => $alias, 'uid' => $uid, 'avatar' => $avatar])->exec($pdo); $pdo->commit(); } catch (Exception $e) { Logger::warning("createUser({$account}) failed with " . $e->getMessage()); $pdo->rollBack(); throw $e; } $token['uid'] = $uid; $tokens->updateToken($token, $token); return ['uid' => $uid]; }
public function testUpdate0() { //UPDATE tab SET a=1,b='2',c=now() $this->db->setExpected('UPDATE tab SET a=?,b=?,c=now()', 1, '2'); Sql::update('tab')->setArgs(['a' => 1, 'b' => '2', 'c' => Sql::native('now()')])->exec($this->db); Sql::update('tab')->set('a', 1)->set('b', '2')->set('c', Sql::native('now()'))->exec($this->db); Sql::update('tab')->set('a', 1)->setArgs(['b' => '2', 'c' => Sql::native('now()')])->exec($this->db); Sql::update('tab')->setArgs(['a' => 1, 'b' => '2'])->set('c', Sql::native('now()'))->exec($this->db); }