Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    286

    Prepared statement vs transaction in PDO

    qual'è la vera differenza tra Prepared statement
    Codice PHP:
    <?php
    /* Execute a prepared statement by binding PHP variables */
    $calories 150;
    $colour 'red';
    $sth $dbh->prepare('SELECT name, colour, calories
        FROM fruit
        WHERE calories < :calories AND colour = :colour'
    );
    $sth->bindParam(':calories'$caloriesPDO::PARAM_INT);
    $sth->bindParam(':colour'$colourPDO::PARAM_STR12);
    $sth->execute();
    ?>
    e una cosa tipo questa?
    Codice PHP:
    <?php
    /* Begin a transaction, turning off autocommit */
    $dbh->beginTransaction();
    /* Change the database schema and data */
    $sth $dbh->exec("DROP TABLE fruit");
    $sth $dbh->exec("UPDATE dessert
        SET name = 'hamburger'"
    );
    $dbh->Commit();
    /* Recognize mistake and roll back changes */
    $dbh->rollBack();
    /* Database connection is now back in autocommit mode */
    ?>
    Qual'è + indicato usare per una programmazione corretta. Per esempio: nel libro "Beginning PHP and PostgreSQL E-Commerce from novice to professional" non usano $dbh->beginTransaction(); usano prepare() e execute() ma non usano bindParam().

    grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    286
    qualche esperto che possa spiegare le differenze reali tra i due modi di programmare

  3. #3
    gli esempi che hai fatto sono due casi troppo diversi, in uno usi le transazioni e nell'altro no... e cmq potevi usare nel primo lo stesso approcio del secondo. io posso dirti quando è preferibile usare i prepared statements.

    anzitutto per motivi di sicurezza, le sql injection sono praticamente impossibili usando questo approcio

    per il resto ti faccio un esempio banale ma concreto di quando è preferibile usarle:

    codice:
    $mioArray = array(
      1,
      2,
      3,
      4,
      5
    );
    
    $sth = $dbh->prepare("SELECT * from tabella where id = :id");
    foreach($mioArray as id) {
      $sth->bindParam(':id', $id);
      $sth->execute(); 
    }

    ora è chiaro che in questo caso serve a poco ma immginalo con una query che deve ricevere dall'esterno un gran numero di parametri... la prepare basta farla una sola all'esterno del ciclo, poi viene riutilizzata passando i valori con bindParam, senza bisogno di inizializzare ogni volta $sth all'interno del foreach, risparmi risorse e l'esecuzione è piu veloce se devi farne qualche centinaio...
    Manuel

    View my profile on LinkedIn
    Ubertini: amo solo te!

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    286
    il metodo begintransaction si puo' usare anche con l'esempio che hai fatto tu?
    Nei vari esempi che ho visto in giro non ho mai visto usare begintransaction e prepare insieme.

  5. #5
    non ricordo di averla mai usata in quel contesto ma immagino che commit e/o rollback agiscano sulla execute dunque credo si possa fare tranquillamente...
    fa una prova e facci sapere

    Manuel

    View my profile on LinkedIn
    Ubertini: amo solo te!

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.