-1
People for security I decided to use Transaction, I hope it works like this:
Concludes only if all the querys rotate.
You suggest something better?
<?php
if (isset($_GET['deletar']) && $_GET['deletar'] == 'sim'):
$lojista = (int)$_GET['lojista'];
BD::conn()->beginTransaction();
$deletar_lojista = BD::conn()->prepare("DELETE FROM `loja_lojistas` WHERE `id` = :id");
$deletar_lojista->bindValue(':id', $lojista, PDO::PARAM_INT);
$deletar_lojista->execute();
if(!$deletar_lojista){
BD::conn()->rollBack();
}
$deletar_loja = BD::conn()->prepare("DELETE FROM `admin_lojas` WHERE `id_loja` = :id");
$deletar_loja->bindValue(':id', $lojista, PDO::PARAM_INT);
$deletar_loja->execute();
if(!$deletar_loja){
BD::conn()->rollBack();
}
// Apaga todas as fotos de produtos que o Lojista cadastrou
$deletar_fotos_produtos = BD::conn()->prepare("SELECT `imagem` FROM `loja_produtos` WHERE `id_loja` = :id");
$deletar_fotos_produtos->bindValue(':id', $lojista, PDO::PARAM_INT);
$deletar_fotos_produtos->execute();
$foto = $deletar_fotos_produtos->fetchObject();
unlink('../../../www/produtos/'.$foto->imagem);
$deletar_produtos = BD::conn()->prepare("DELETE FROM `loja_produtos` WHERE `id_loja` = :id");
$deletar_produtos->bindValue(':id', $lojista, PDO::PARAM_INT);
$deletar_produtos->execute();
if(!$deletar_produtos){
BD::conn()->rollBack();
}
$deletar_produtos_pedidos = BD::conn()->prepare("DELETE FROM `loja_produtos_pedidos` WHERE `id_loja` = :id");
$deletar_produtos_pedidos->bindValue(':id', $lojista, PDO::PARAM_INT);
$deletar_produtos_pedidos->execute();
if(!$deletar_produtos_pedidos){
BD::conn()->rollBack();
}
$deletar_pedidos = BD::conn()->prepare("DELETE FROM `loja_pedidos` WHERE `id_loja` = :id");
$deletar_pedidos->bindValue(':id', $lojista, PDO::PARAM_INT);
$deletar_pedidos->execute();
if(!$deletar_pedidos){
BD::conn()->rollBack();
}
$deletar_categorias = BD::conn()->prepare("DELETE FROM `loja_categorias` WHERE `id_loja` = :id");
$deletar_categorias->bindValue(':id', $lojista, PDO::PARAM_INT);
$deletar_categorias->execute();
if(!$deletar_categorias){
BD::conn()->rollBack();
}
$deletar_subcategorias = BD::conn()->prepare("DELETE FROM `loja_subcategorias` WHERE `id_loja` = :id");
$deletar_subcategorias->bindValue(':id', $lojista, PDO::PARAM_INT);
$deletar_subcategorias->execute();
if(!$deletar_subcategorias){
BD::conn()->rollBack();
}
$deletar_pagamentos = BD::conn()->prepare("DELETE FROM `admin_pagamentos` WHERE `id_lojista` = :id");
$deletar_pagamentos->bindValue(':id', $lojista, PDO::PARAM_INT);
$deletar_pagamentos->execute();
if(!$deletar_pagamentos){
BD::conn()->rollBack();
}
$deletar_vencimentos = BD::conn()->prepare("DELETE FROM `admin_vencimentos` WHERE `id_lojista` = :id");
$deletar_vencimentos->bindValue(':id', $lojista, PDO::PARAM_INT);
$deletar_vencimentos->execute();
if(!$deletar_vencimentos){
BD::conn()->rollBack();
}
BD::conn()->commit();
echo "<script type='text/javascript'>
$.alert({
theme: 'black',
title: 'Deletado com sucesso!',
content: '',
icon: '',
confirmButton: 'OK',
confirmButtonClass: 'btn-primary',
animation: 'scale',
animationClose: 'top',
opacity: 0.5,
});
</script>";
endif;
?>
Yes, a framework and/or ORM rsrsrs.
– mau humor
Then the transaction fails, it’s all in DB, but the photos were deleted from the hard drive anyway. It would be better if at the end, confirmed the success of the transaction, you deleted the photos. What you can do there, if you change the database, is create a Deletardodb( $connected, $table, $id ) function to make life easier. Or do in a foreach, passing the list of tables as array.
– Bacco