sql >> Base de Datos >  >> RDS >> Mysql

Ejemplos de transacciones de PHP + MySQL

La idea que generalmente uso cuando trabajo con transacciones se ve así (semi-pseudo-código) :

try {
    // First of all, let's begin a transaction
    $db->beginTransaction();
    
    // A set of queries; if one fails, an exception should be thrown
    $db->query('first query');
    $db->query('second query');
    $db->query('third query');
    
    // If we arrive here, it means that no exception was thrown
    // i.e. no query has failed, and we can commit the transaction
    $db->commit();
} catch (\Throwable $e) {
    // An exception has been thrown
    // We must rollback the transaction
    $db->rollback();
    throw $e; // but the error must be handled anyway
}

Tenga en cuenta que, con esta idea, si una consulta falla, se debe lanzar una excepción:
  • PDO puede hacer eso, dependiendo de cómo lo configures
  • de lo contrario, con alguna otra API, es posible que deba probar el resultado de la función utilizada para ejecutar una consulta y lanzar una excepción usted mismo.

Desafortunadamente, no hay magia involucrada. No puede simplemente colocar una instrucción en algún lugar y hacer que las transacciones se realicen automáticamente:aún debe especificar qué grupo de consultas debe ejecutarse en una transacción.

Por ejemplo, muy a menudo tendrá un par de consultas antes de la transacción (antes del begin ) y otro par de consultas después de la transacción (después de commit o rollback ) y querrá que esas consultas se ejecuten sin importar lo que haya pasado (o no) en la transacción.