• User

    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?


  • Moderatore

    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.


  • User Attivo

    @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.


  • User

    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 :bigsmile:


  • User Attivo

    E' veroooooo!!!! :arrabbiato: