Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505

    Problema transazione mysql con php

    Il mio script prende dal db i dati di un articolo: titolo, testo ed eventuali 3 immagini (i nomi dei file), mostra il tutto in una form per effettuare delle modifiche.
    Funziona tutto, ma per testare gli errori ho scritto volutamente male una query, in questo modo mi aspetterei che venga effettuato il rollback, ma così non è.
    Questo è il codice incriminato
    [php]
    if(sizeof($errori) == 0) //non ci sono stati errori durante l'upload delle immagini
    {
    mysql_query("BEGIN");

    $query_testo = "UPDATE ".$tabella."
    SET titolo='".mysql_real_escape_string(stripslashes($_ POST['titolo']))."',
    articolo='".mysql_real_escape_string(stripslashes( $_POST['testo']))."',
    re

  2. #2
    Probabilmente perchè MySQL ha di default l'autocommit a true. Una volta disabilitato l'autocommit ( SET autocommit=0; ) è possibile utilizzare le istruzioni COMMIT per rendere effettive le modifiche al DB oppure ROLLBACK per annullarle.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  3. #3
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Ho provato così, ma niente
    [php]
    if(sizeof($errori) == 0) //non ci sono stati errori durante l'upload delle immagini
    {
    mysql_query('SET autocommit=0');
    mysql_query("START TRANSACTION"); //ho provato anche BEGIN

    $query_testo = "UPDATE ".$tabella."
    SET titolo='".mysql_real_escape_string(stripslashes($_ POST['titolo']))."',
    articol='".mysql_real_escape_string(stripslashes($ _POST['testo']))."',
    revisionato=1
    WHERE cf_id=".$_POST['cf_id']." AND uid='".$_POST['uid']."'";
    if(!mysql_query($query_testo))
    {
    $errori[] = "Errore durante il salvataggio dell'articolo nel db";
    }

    if(sizeof($query_img) > 0) //c'è almeno un'immagine da registrare nel db
    {
    foreach($query_img as $query)
    {
    if(!mysql_query($query))
    {
    $errori[] = "Errore durante il salvataggio dell'immagine nel db";
    }
    }
    }

    if(sizeof($errori) > 0) //c'è stato almeno un errore durante le query
    {
    mysql_query("ROLLB

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Vabbè... non riesco a postare tutto il codice, oggi il forum ce l'ha con me...

  5. #5
    Ho fatto una banalissima prova in locale:

    Codice PHP:
    <?php
        $error 
    false;
        
    $connect mysql_connect("localhost""root""root");
        
    $db mysql_select_db("prova"$connect);
        
    $result mysql_query("START TRANSACTION");
        
    $result mysql_query("INSERT INTO test (value) VALUES ('aaa')");
        if (
    $error) {
            exit;
        }
        
    $result mysql_query("COMMIT");
    ?>
    Se valorizzo $errore a true l'exit mi fa terminare lo script e la insert non viene eseguita, in caso contrario la insert va a buon fine, ma solamente dopo l'invocazione del COMMIT.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.