Saltar al contenido

Ejemplos de transacciones PHP + MySQL

Este tutorial fue evaluado por nuestros expertos así se asegura la exactitud de esta sección.

Solución:

La idea que generalmente uso cuando trabajo con transacciones se ve así (semipseudocó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 configure
    • Ver PDO::setAttribute
    • y PDO::ATTR_ERRMODE y PDO::ERRMODE_EXCEPTION
  • 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 poner 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, a menudo tendrá un par de consultas antes de la transacción. (antes de begin) y otro par de consultas después de la transacción (después de cualquiera commit o rollback) y querrás que esas consultas se ejecuten sin importar lo que sucedió (O no) en la transacción.

Creo que lo he descubierto, ¿verdad ?:

mysql_query("START TRANSACTION");

$a1 = mysql_query("INSERT INTO rarara (l_id) VALUES('1')");
$a2 = mysql_query("INSERT INTO rarara (l_id) VALUES('2')");

if ($a1 and $a2) 
    mysql_query("COMMIT");
 else         
    mysql_query("ROLLBACK");


Aquí puedes ver las reseñas y valoraciones de los usuarios

Acuérdate de que te concedemos esclarecer si chocaste tu rompecabezas .

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *