Visualizzazione dei risultati da 1 a 2 su 2

Discussione: Transazione php mysql

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    77

    Transazione php mysql

    Ciao a tutti, avrei bisogno di aiuto per fare una transazione. Premetto che non sono molto competente in materia e ho già provato diverse query trovate su internet nessuna funzionante...
    Questo è il mio codice php
    Codice PHP:
    if($importo>$saldo){
            echo
    "

    L'importo supera il saldo disponibile.</p>"
    ;
        }
        else{
            
    $con =mysqli_connect("localhost","uReadWrite","SuperPippo!!!","pagamenti");
            if (
    mysqli_connect_errno())
            
    printf ("

    errore - collegamento al DB impossibile: %s

    \n"
    mysqli_connect_error());
            else{
    $query1="UPDATE usr SET saldo=saldo-'$importo' WHERE nome='$src'";
                
    $query2="UPDATE usr SET saldo=saldo+'$importo' WHERE nome='$dst'";
                
    $query3="INSERT INTO `log` (`src`, `dst`, `importo`, `data`) VALUES ('$src_nick', '$dst_nick', $importo, '$data')";
                
    $result1mysqli_query($con,$query1);
                
    $result2mysqli_query($con,$query2);
                
    $result3mysqli_query($con,$query3);
                if(!
    $result1)
                {
                    
    printf ("

    errore – query fallita: %s

    \n"
    mysqli_error($con));
                }
                else if(!
    $result2)
                {
                    
    printf ("

    errore – query2 fallita: %s

    \n"
    mysqli_error($con));
                }
                else if(!
    $result3)
                {
                    
    printf ("

    errore – query3 fallita: %s

    \n"
    mysqli_error($con));
                }
                else{ ...... 
    Cosi facendo se ho degli errori me li segnala ma se per esempio ha dei problemi la terza query le prime 2 me le effettua, facendo un lavoro a metà (cosa che voglio evitare). So che dovrei usare le transazioni con roolback e commit ma non sono capace. Sapete dirmi come fare? Grazie

  2. #2
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Come ha già detto devi usare commit/rollback. Con le transazioni ti consiglio un approccio più OO.
    nel tuo caso:
    Codice PHP:
    $query1="UPDATE usr SET saldo=saldo-'$importo' WHERE nome='$src'";
    $query2="UPDATE usr SET saldo=saldo+'$importo' WHERE nome='$dst'";
    $query3="INSERT INTO `log` (`src`, `dst`, `importo`, `data`) VALUES ('$src_nick', '$dst_nick', $importo, '$data')";
    mysqli_query("SET AUTOCOMMIT=0");
    mysqli_query("START TRANSITION");
    try{
       if(!
    mysqli_query($con,$query1){
          throw new 
    Exception("errore – query fallita: "mysqli_error($con));
       }
       if(!
    mysqli_query($con,$query2){
          throw new 
    Exception("errore – query2 fallita: "mysqli_error($con));
       }
       if(!
    mysqli_query($con,$query3){
          throw new 
    Exception("errore – query3 fallita: "mysqli_error($con));
       }
       
    mysqli_query($con"COMMIT");   
    }catch (
    Exception $ex){
        echo 
    $ex->getMessage();
        
    mysqli_query($con"ROLLBACK");


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.