Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    1,085

    sql .. start transaction

    Ciao ..
    dovendo aggiornare più tabelle nella stessa pagina, stò usando una 'start transaction', da chiudere alla fine con una 'commit' o un 'rollback' ..
    il problema è che ho riscontrato, che se per caso avviene un errore bloccante (es. uso di una variabile non dichiarata), tutte le operazioni sql fatta fino a quel momento, vengono confermate ..
    come posso risolvere il problema ?
    Grazie mille

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    1,085
    nessuno .. !?

  3. #3

    Re: sql .. start transaction

    Originariamente inviato da JANUS70
    il problema è che ho riscontrato, che se per caso avviene un errore bloccante (es. uso di una variabile non dichiarata), tutte le operazioni sql fatta fino a quel momento, vengono confermate ..
    come posso risolvere il problema ?
    Grazie mille
    Non è un problema... è php che funziona così.
    - PARSE ERROR: tutte le istruzioni presenti, precedenti o successive alla riga in cui è presente l'errore, non verranno eseguite.
    - FATAL ERROR: le istruzione precedenti all'errore saranno eseguite, mentre quelle successive verranno ignorate.
    - WARNING / NOTICE / DEPRECATED / STRICT : verranno eseguite tutte le istruzioni sia precedenti sia successive all'istruzione incriminata.

    Il caso da te citato (uso di una variabile non dichiarata) è un NOTICE che non interrompe l'esecuzione del codice.
    http://www.miniscript.it
    Se ti sono stato di aiuto in qualche modo in questo forum iscriviti alla fan page di Miniscript - il mio blog di programmazione web.

  4. #4
    Utente di HTML.it L'avatar di hyde82
    Registrato dal
    Feb 2010
    Messaggi
    243
    quando usi start transaction....non so se con PDO o altro, conviene tenere il codice di riferimento in un blocco try....catch...
    ciao

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    1,085
    Originariamente inviato da hyde82
    quando usi start transaction....non so se con PDO o altro, conviene tenere il codice di riferimento in un blocco try....catch...
    ciao
    avevo pensato anch'io alle eccezioni .. ma non sono molto ferrato ..

    chiedo troppo se ti chiedessi un piccolo schemino su come deve essere costruita la struttura ?
    è chiaro che le istruzioni incriminate (sql su varie tabelle) sono sparse ..


    Grazie mille

  6. #6
    Utente di HTML.it L'avatar di hyde82
    Registrato dal
    Feb 2010
    Messaggi
    243
    usi PDO?

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    1,085
    Originariamente inviato da hyde82
    usi PDO?
    adesso fai una domanda difficile ..
    cos'è il 'POD' ?

  8. #8
    PDO non POD

    http://www.php.net/manual/en/intro.pdo.php

    Codice PHP:

    $conn 
    = new PDO(...);

    try{

    $conn->beginTransaction();

    //do some queries

    $conn->commit();

    }catch(
    PDOException $ex){
       echo 
    "errori nelle query sql/connessione db";
       echo 
    $ex->getMessage();
       
    $conn->rollBack();

    cmq se guardi http://www.php.net/manual/en/class.pdo.php trovi altri esempi

    se usi mysqli

    http://www.php.net/manual/en/mysqli.commit.php
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    1,085
    ok ..
    ma se non ho capito male il PDO è un metodo per connettersi al DB ..
    e secondo me l'esempio di try che mi è stato proposto non risolve il mio problema ..

    io non ho l'esigenza di gestire l'errore specifico della singola operazione sql, ma piuttosto qualsiasi errore che avvenga nell'ambito di un qualsiasi punto del programma, dopo che sia già stata eseguita una delle tante operazioni (update) sql.
    L'interruzione del programma, senza che si arrivi al punto in cui si fà la 'commit' o il 'rollback' (in questo caso il rollback), con la conseguente conferma (commit) di tutte le operazioni sql fatte fino a quel momento fà si che mi ritrovi un aggiornamento 'parziale' del DB .. cosa che assolutamente non può avvenire !
    In soldoni, dovrebbe esserci una gestione per cui al verificarsi di un errore di sistema (non gestito dal programma), non si esegua la commit, ma il rollback.

    Spero di essere stato chiaro
    Grazie

  10. #10
    tu puoi fare:

    Codice PHP:

    <?php

    //init connection to db

    try{

    //tutto

    //il 

    //tuo

    //script

    //con tanto di query

    }catch(Exception $ex){
    echo 
    $ex->getMessage();
    $connection->rollback();

    }
    anche se non so se prenda tutti gli errori possibili perchè non mi ricordo se ora in php tutti gli errori lanciano eccezioni o meno.

    cmq se tu evitassi di fare uno script con errori di sintassi e/o uso di variabili non inizializzate sarebbe sempre meglio
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

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 © 2024 vBulletin Solutions, Inc. All rights reserved.