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($result, MYSQLI_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($result, MYSQLI_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...";
}