【问题标题】:PHP rollback method has failedPHP回滚方法失败
【发布时间】:2015-05-27 05:57:36
【问题描述】:

我已经尝试过这段代码,不幸的是回滚方法失败了! 提前致谢!!

$bash = new mysqli('localhost', 'root', '','dbastegoi');
$bash->autocommit(FALSE);

echo 'timologio';
$r =$bash->query("INSERT INTO tbparastatika (strArithmos, fkERGO, strPROMITH, sngCOST, intTYPOS, intDRASH) VALUES ('1','1001','123123123',800138,1,1)");
//ΕΙΣΑΓΩΓΗ ΤΙΜΟΛΟΓΙΟΥ
 $i = $bash->insert_id;
ECHO PHP_EOL;
echo 'dapanh';
try {
    $r =$bash->query("INSERT INTO tbdapanes_stegash (idPARASTATnIKO, sngCOST, fkDIAMERISMA, intMONTH) VALUES ($i,100,1,1)");
    echo $r;
} catch (Exception $e) {
    echo 'error2';
}

$bash->commit();
$bash->rollback();

//$SYNDESH->commit();
//$SYNDESH->rollback();
$bash->close();

【问题讨论】:

    标签: php mysql rollback


    【解决方案1】:

    您不能先提交,然后再进行回滚。如果您的查询运行没有错误,则必须提交,如果遇到错误,则必须回滚:

    try {
        $r =$bash->query("INSERT INTO tbdapanes_stegash (idPARASTATnIKO, sngCOST, fkDIAMERISMA, intMONTH) VALUES ($i,100,1,1)");
        echo $r;
        $bash->commit();
    } catch (Exception $e) {
        echo 'error2';
        $bash->rollback();
    }
    

    【讨论】:

    • 我应该对每个查询都使用 catch 吗?
    • @ΛάζαροςΚώτσικας 这取决于你的交易应该是什么。
    • 在上面的代码中你认为我应该在第一次查询时使用回滚?
    • @ΛάζαροςΚώτσικας 回滚仅在您的事务包含多个语句时才有意义。 rollack 将所有成功的查询 ack 滚动到您调用 rollback 并且未提交的所有查询。对于单个查询,回滚是没有意义的。
    • 我知道但不幸又失败了:)!
    猜你喜欢
    • 2015-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-31
    • 2019-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多