Visualizzazione dei risultati da 1 a 6 su 6

Discussione: PDO: transazioni

  1. #1

    PDO: transazioni

    ieri son passato col mio framework a PDO e quindi mi son buttato in questo nuovo mondo che non avevo avuto modo di studiare in passato

    ho visto che sono implementate le transazioni e volevo sapere se è impensabile e idiota ( o cosa? ) usare solo transazioni

    ovviamente userò più risorse, ma la maggiore sicurezza penso che mi ripaghi ampiamente ( tanto ho un sistema di caching eccellente )

    usandole ho questo errore PDOException

    Codice PHP:
    'There is already an active transaction' 
    il codice che uso nel mio oggetto è questo

    Codice PHP:
    $this->conn->beginTransaction(); 
    return 
    $this->conn->query($q);         
    $this->conn->rollBack(); 
    in giro dicono di chiudere il cursore
    come lo implemento?

    rollBack quando ha finito perchè non rilascia il cursore?
    comunque ho provato ad aggiungere closeCursor
    Codice PHP:
    $this->conn->beginTransaction(); 
    return 
    $this->conn->query($q); 
    $this->conn->rollBack(); 
    $this->conn->closeCursor(); 
    ma niente, stesso errore

    provo ad usare il prepare? si può usare il prepare con le transazioni? mo provo

  2. #2

  3. #3

    Re: PDO: transazioni

    Originariamente inviato da andrea.paiola
    rollBack quando ha finito perchè non rilascia il cursore?
    Lo rilascia. Il problema è che nel tuo codice hai un return di troppo e il rollback non lo fa mai.

  4. #4

    Re: Re: PDO: transazioni

    Originariamente inviato da ntd
    Lo rilascia. Il problema è che nel tuo codice hai un return di troppo e il rollback non lo fa mai.
    grazie, il return lo metto perchè voglio il risultato della query ed è dentro un metodo dell'oggetto percui... boh hai alternative al return?

  5. #5
    Registralo in una variabile temporanea e ritorna quella:

    Codice PHP:
    $this->conn->beginTransaction();
    $resource $this->conn->query($q);
    $this->conn->rollBack();
    return 
    $resource
    Un dettaglio: se vuoi evitare che il PHP faccia una copia della risorsa (non ho idea di quanto possa essere dispensioso) puoi ritornare $resource per riferimento prefissando il nome della funzione con l'AND:

    Codice PHP:

    public function &runInTransaction($query)
    {
        ...
        
    $resource $this->conn->query($query);
        ...
        return 
    $resource;


  6. #6
    molte grazie
    era una cosa così semplice, eppure non ci avevo pensato

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.