Daniel G. Parrilla
Julian David Alzate Cuervo
Miguel Sosa
Daniel G. Parrilla
Marlón Andrés Cuartas Aguirre
Blanca Segura Garcia
Natalia Gutierrez
Juan Pablo Campuzano Monsalve
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Í")
excelente, hay que tener en cuenta esto ya que podría causar daños en la data
El ejemplo que usa Retax es puramente ilustrativo, sin duda que usar esta opción no es la mejor, esto debería hacerce mediante otros mecanismos de control
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.
Muy buen aporte compañero, muchas gracias.
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:
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(); } }