Php 同时执行更新
我有两个表-用户和代码。我需要插入用户并为创建的帐户分配第一个免费(未分配-id\u user=0)行和代码(奖品) 下面我附上我的代码。您认为这足以确保不会出现一个代码分配给多个用户的情况吗 我的意思是,如果一行在同一时间,结果只有一个用户将获得奖金Php 同时执行更新,php,mysql,sql,pdo,transactions,Php,Mysql,Sql,Pdo,Transactions,我有两个表-用户和代码。我需要插入用户并为创建的帐户分配第一个免费(未分配-id\u user=0)行和代码(奖品) 下面我附上我的代码。您认为这足以确保不会出现一个代码分配给多个用户的情况吗 我的意思是,如果一行在同一时间,结果只有一个用户将获得奖金 try { $this->pdo->beginTransaction(); $result = $this->pdo->prepare(
try {
$this->pdo->beginTransaction();
$result = $this->pdo->prepare(
"INSERT INTO `users`(`id`, `fn`, `sn`, `email`, `city`, `cdatet`, `ldatet`, `active`, `hash`) VALUES (0, :fn, :sn, :email, :city, now(), now(), 0, :hash)");
$result->bindParam(':fn', $fn);
$result->bindParam(':sn', $sn);
$result->bindParam(':email', $mail);
$result->bindParam(':city', $city);
$result->bindParam(':hash', $hash);
$result->execute();
$lastId = $this->pdo->lastInsertId();
$result2 = $this->pdo->prepare(
"UPDATE `codes` SET `id_user`=:uid WHERE `id_user`=0 ORDER BY `class` DESC LIMIT 1");
$result2->bindParam(':uid', $lastId);
$result2->execute();
$this->pdo->commit();
return $lastId;
} catch (PDOException $e) {
$this->logError($e->getCode(), $e->getMessage());
$this->pdo->rollBack();
}
return 0;
该事务应保护您免受多重分配场景的影响,因此是的,这可能会起作用。该事务应保护您免受多重分配场景的影响,因此是的,这可能会起作用。