- Home
- Categorie
- Coding e Sistemistica
- MYSQL e altri Database
- Problema query mysql
-
Problema query mysql
Buonasera,
continuando con il solito progetto di gestione prodotti online, vi riporto uno script che mi sta facendo dannare...
[PHP]
case "Cancella":
$conn = new mysqli($host_name, $user_name, $password, $data_name);
$query = "SELECT path_foto FROM prodotto where id_prod = ".$_POST['id'];
$result=$conn->query($query); $target_file = $result->fetch_assoc()['path_foto'];
try{
$conn->Begin_transaction();
$query = "DELETE FROM prodotto WHERE id_prod = ".$_POST['id'];
if(!$conn->query($query)){
throw new Exception('Cancellazione dati fallita,problemi database.');
}
if(file_exists($target_file) and !unlink($target_file)){
throw new Exception('Cancellazione dati fallita,problemi FTP.');
}msg( "Il prodotto è stato cancellato correttamente.","success");
}
catch(Exception $e){
msg("<b>Error:</b> ".$e->getMessage()."<br/><b> Operazione annullata</b>","danger");
$conn->rollback();
}
$conn->close();
break;
[/PHP]Il problema è che lo script funziona o almeno fa tornare tutto come avvenuto con successo...effettivamente la cancellazione della foto del prodotto avviene ma nonostante sembra avvenga anche la cancellazione dei dati dal database non è così. Rimangono presenti i prodotti,viene cancellata solo la foto dalla cartella e mi dice che l'operazione è andata a buon fine...
Capite il motivo?
-
Ciao Luigi,
ad occhio mi sembra che la seconda query (la delete per intenderci) viene preparata ma non eseguita. Fai solo il $conn->query ma non l'esecuzione della stessa.
-
@Shad said:
Ciao Luigi,
ad occhio mi sembra che la seconda query (la delete per intenderci) viene preparata ma non eseguita. Fai solo il $conn->query ma non l'esecuzione della stessa.Sicuro? :(): A me sembra che ci sia tutto quello che serve, la seconda query è nell'IF... c'è solo quel NOT che non mi convince come logica del flusso... però ammetto di non aver mai usato try...throw...catch perchè non li ho mai capiti e non vedo che differenza ci sia dall'utilizzare un semplice if...else.
Proverei ad aggiungere qualche riga di debug per vedere se passa tutto correttamente.
-
La soluzione era molto più semplice e sotto i miei occhi,nel blocco try non ho messo la commit...quindi la transazione avveniva ma i risultati non venivano salvati nel db
-
E' veroooooo!!!!