Visualizzazione dei risultati da 1 a 6 su 6

Visualizzazione discussione

  1. #1

    Transazioni MySql con PHP

    Ciao a tutti, sto realizzando una cosa dove ho bisogno di utilizzare le transazioni.
    Quello che dovrei fare è:

    1) Aprire una transazione
    2) Leggere la tabella t_summary_of_work senza farla leggere ad altri e recuperare un dato
    3) Effettuare una INSERT su questa tabella e leggere un determinato dato aggiornato
    4) Fare una UPDATE di un' altra con il dato letto in precedenza sulla prima tabella
    5) Eseguire la COMMIT o la ROLLBACK

    Non capisco come mai ogni volta che eseguo il file ed eseguo la insert nella prima tabella, è come se mi rimanesse aperta la transazione...il valore reale dell' id nel DB è 42, ma ogni volta che eseguo lo script e stampo a video l' ID durante la transazione mi aumenta di 1...difatti a forza di provare sono ormai a 80 e più...poi ovviamente non mi vanno a buon fine le update dandomi errore:
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '0: UPDATE t_jobs SET id_jobs_status = 9, id_summary_of_work = 87 WHERE id_jobs =' at line 1

    Ho anche allegato un' immagine con il risultato del debug...grazie a tutti
    Codice PHP:

    //Avvio la transazione
    $link->query("START TRANSACTION;");

    //recupero l' ultimo id_document inserito nella tabella dei consuntivi
    $result $link->query("SELECT id_document FROM t_summary_of_work ORDER BY id_document DESC LIMIT 1 FOR UPDATE");
    $row mysqli_fetch_array($resultMYSQLI_ASSOC);

    //incremento l' ultimo id_document per inserirlo per il nuovo consuntivo
    $new_doc_id $row["id_document"] + 1;

    //preparo la stringa sql per la insert
    $in_sow "INSERT INTO t_summary_of_work 
                          (
                              id_summary_of_work,                       
                              id_staff,                       
                              id_summary_of_work_status,                       
                              date_sow,                       
                              id_document,                       
                              id_document_year,                       
                              cost_sow,                       
                              with_iva,                       
                              note,                       
                              id_what_order_external,                       
                              subject,                       
                              file_name,                       
                              file_type                     
                          )                 
                      VALUES 
                         (
                              NULL, 
                              "
    .$_SESSION["id_username"].", 
                              1, 
                              '', 
                              
    $new_doc_id
                              '"
    .$_POST["anno"]."', 
                              '', 
                              '', 
                              '', 
                              NULL, 
                              '', 
                              '', 
                              ''
                           )"
    ;    

    //INSERT T_SUMMARY_OF_WORKS  
    print "Risultato della insert: ";        
    var_dump($link->query($in_sow));  
    print 
    "<br><br>";    

    //recupero l' ultimo id inserito 
    $result $link->query("SELECT id_summary_of_work FROM t_summary_of_work ORDER BY id_document DESC LIMIT 1 FOR UPDATE");
    $row mysqli_fetch_array($resultMYSQLI_ASSOC);
    //questa variabile che è l' id autoincrement mi si incrementa come se   ***
    //la transazione rimanesse aperte anche dopo l' esecuzione dello script***
    $id_sow $row["id_summary_of_work"]; //*************************
    //*********************************************************** 

    //Stampo l' ultimo id inserito all' interno della transazione
    //(è quello che si incrementa come se la transazione non si chiudesse mai)
    print "ultimo id inserito = ".$id_sow."<br><br>";    

    //UPDATE T_JOBS  
    //Creo una variabile di controllo che mi segnala se qualcosa va storto  
    //nell' aggiornamento della tabella t_jobs  
    $ctrl 0;    

    //eseguo tot update in base alla quantità di jobs selezionati dalla select  
    for($i=0$i<count($_POST["id_jobs"]); $i++)  
    {    
        
    //stringa sql per l' update    
        
    $in_jobs "UPDATE t_jobs SET id_jobs_status = 9, id_summary_of_work = ".$id_sow."                       WHERE id_jobs = ".$_POST["id_jobs"][$i];     

        
    //print $in_jobs."<br><br>";          
        
        //eseguo l' update e stampo un po' di dati per il debug     
        
    print "<br><br>Stringa sql UPDATE ".$i.": ";     
        print 
    $in_jobs "<br>";     
        print 
    "Esito: ";     

        
    //se l' update va a buon fine incremento di uno $ctrl     
        
    if(var_dump($link->query($in_jobs)))     
        {        
           
    $ctrl++;        
           print 
    "<br><br>sto incrementando ctrl<br><br>";     
        }                                       
    }       

    //STAMPO UN PO' DI ROBA PER IL DEBUG**********    
    print "<br><br>Risultato delle UPDATE (var ctrl): ";  
    var_dump($ctrl);    
    print 
    "<br><br>";                          
    //*********************************************          
    //se la insert ritorna true e $ctrl incrementando raggiunge il numero         
    //di elementi dell' array $_POST["id_jobs"], eseguo il commit        
    if($link->query($in_sow) == true AND $ctrl == count($_POST["id_jobs"]))         
    {           
         
    $link->query("COMMIT");           
         print 
    "<br>Consuntivo inserito con sulcesso...";          
    }        
    else        
    {           
         
    $link->query("ROLLBACK");           
         print 
    "<br>E' stata eseguita la ROLLBACK dei dati...";        

    Immagini allegate Immagini allegate

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.