Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 同时执行更新_Php_Mysql_Sql_Pdo_Transactions - Fatal编程技术网

Php 同时执行更新

Php 同时执行更新,php,mysql,sql,pdo,transactions,Php,Mysql,Sql,Pdo,Transactions,我有两个表-用户和代码。我需要插入用户并为创建的帐户分配第一个免费(未分配-id\u user=0)行和代码(奖品) 下面我附上我的代码。您认为这足以确保不会出现一个代码分配给多个用户的情况吗 我的意思是,如果一行在同一时间,结果只有一个用户将获得奖金 try { $this->pdo->beginTransaction(); $result = $this->pdo->prepare(

我有两个表-用户和代码。我需要插入用户并为创建的帐户分配第一个免费(未分配-id\u user=0)行和代码(奖品)

下面我附上我的代码。您认为这足以确保不会出现一个代码分配给多个用户的情况吗

我的意思是,如果一行在同一时间,结果只有一个用户将获得奖金

     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;

该事务应保护您免受多重分配场景的影响,因此是的,这可能会起作用。该事务应保护您免受多重分配场景的影响,因此是的,这可能会起作用。