在PDO中回滚事务的位置?

6 php mysql database pdo insert

我的问题是,我从这个链接的数据库设计是我的数据库过度设计?

编辑*确定可能使用交易?但如果失败,我应该把回滚放在哪里?

 $dbConnect->beginTransaction();
 $RegisterInsert = $dbConnect->prepare("INSERT INTO companies (
    `name`, `address`, `email`, `phone`, `link`, `verified`) VALUES (
    :name, :address, :email, :phone, :link, :verified)");
    $RegisterInsert->execute($RegisterData);

    $RegisterData2['CID'] = $dbConnect->lastInsertId();  

    $RegisterInsert = $dbConnect->prepare("INSERT INTO users_companies (
    `UID`, `CID`, `role`) VALUES (
    :UID, :CID, :role)");
    $RegisterInsert->execute($RegisterData2);
    $dbConnect->commit();
Run Code Online (Sandbox Code Playgroud)

我应该把回滚放在哪里?

谢谢

Kal*_*n02 5

交易应以rollback()或结束commit()(仅其中之一)

它通常与if...else语句一起使用,因为逻辑上仅应执行其中之一。

$dbConnect->beginTransaction();

//somecode
//$dbConnect->execute( $someInsert );
//some more code
//$result = $dbConnect->execute( $someSelect );
//$nextRow = $result->fetchRow();

//either commit or rollback!
if( $someResultCheck == true )
    $dbConnect->commit();
else
    $dbConnect->rollback();
Run Code Online (Sandbox Code Playgroud)

通常在查询涉及复杂逻辑时使用事务。

如果您使用的是MySQL,请确保您没有将MyISAM引擎用于表,因为它不支持事务。


sym*_*ean 5

一旦知道整个事务将失败,那么您应该回滚到目前为止所做的事情,而不要尝试任何进一步的更新-因此使用伪代码:

 function do_updates(array updates)
 { 
    PDO->beginTransaction();
    foreach (updates as statement) {
       run statement
       if failed {
         PDO->rollback(); 
         return false;
       }
    }
    return PDO->commit();
Run Code Online (Sandbox Code Playgroud)

高温超导

C。