No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Transacciones: cómo revertir una consulta SQL con PHP

21/26
Recursos

Aportes 5

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Preguntar if ($sure==”no”) es muy riesgoso porque si escribe NO(con mayúsculas) o cualquier cosa borrará el registro. Se debería preguntar if (strtoupper($sure) == “SI” || strtoupper($sure) == “SÍ”)

El uso de beginTransaction es importante, por ejemplo, en el caso de grabar una factura donde hay que actualizar las tablas de stock, cuentas corrientes, comisiones a vendedores, etc. y se produce un error durante la actualización en algunas de las tablas, algunas tablas quedarían actualizadas y otras no, esto haría que la base de datos no fuera confiable. Para solucionar este inconveniente se debe hacer un rollback, así la base de datos queda intacta aunque la facturación quedará pendiente.

Formas seguras de ejecutar MySQL … Nunca usar el comando “beginTransaction()” con “DROP TABLE”, MySQL vs. MariaDB no respetan y al toque la borra!!! Es de sumo cuidado!

Que peligro !!
Confirmo, he hecho la prueba con MariaDB y no responde a beginTransaction()
De hecho lanza una exception :

Prueba:

    public function drop($table)
    {
        // Clase 21: Transacciones: cómo revertir una consulta
        $statement = $this->pdo->beginTransaction();
        $statement = $this->pdo->exec("DROP TABLE {$table}");
        $this->pdo->rollBack();
        // $this->pdo->commit();
    }

Resultado:

PDOException
There is no active transaction
Impresionante, nunca había visto el método de beginTransaction. Por aquí el código de la clase: ```txt public function destroy($id){ $this->connection->beginTransaction(); // $this->connection->exec("DROP TABLE incomes_test"); $stmt = $this->connection->prepare("DELETE FROM incomes WHERE id = :id"); $stmt->execute([ ":id" => $id ]); $sure = readline("¿De verdad quieres eliminar este registro?"); if($sure == "no"){ $this->connection->rollBack(); }else{ $this->connection->commit(); } } ```    *public* function destroy($id){                $this->connection->beginTransaction();         *// $this->connection->exec("DROP TABLE incomes\_test");*         $stmt = $this->connection->prepare("DELETE FROM incomes WHERE id = :id");        $stmt->execute(\[            ":id" => $id        ]);                $sure = readline("¿De verdad quieres eliminar este registro?");         if($sure == "no"){            $this->connection->rollBack();        }else{            $this->connection->commit();        }     }