Visualizzazione dei risultati da 1 a 7 su 7

Discussione: controllo INSERT

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    323

    controllo INSERT

    Salve a tutti, io ho una pagina PHP con due insert in tabelle MYSQL tipo INNODB.

    La mia domanda é: come faccio a controllare le due insert:
    ossia se l'insert 1 non va a buon fine non fare l'insert 2 e se l'insert2 non va a buon fine cancella l'insert1 e non fare inserimenti.

    INSERT1 OK e INSERT2 OK == inserisci dati in Database
    INSERT1 NON OK e INSERT2 OK == NON inserire dati in DB
    INSERT1 OK e INSERT2 NON OK == NON inserire dati in DB

    Non so se mi sono spiegato, grazie a tutti dell'attenzione

  2. #2
    Utente di HTML.it L'avatar di byaur
    Registrato dal
    Aug 2004
    Messaggi
    1,061
    dovresti utilizzare i punti di COMMIT e i ROLLBACK, che mi sembra direttamente siano gestibili dall'estensione mysql di PHP solo con tabelle di tipo INNODB, ma forse sbaglio...
    c'èra una discussione in proposito qui

    cmq io, per fare le query in genere utilizzo l'oggetto PDO del php, che gestisce in maniera facile sia l'astrazione dal tipo di database utilizzato(non l'astrazione dal linguaggio sql), sia i metodi per la gestione delle transazioni(commit, rollback,etc...)

    ciauz
    Chi di noi non vorrebbe
    sollevare il velo sotto cui sta nascosto il
    futuro...
    David Hilbert

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    323
    grazie, ora mi stidio l'oggetto PDO!!!

    CIAO

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    323
    CIAO, ecco qua un mio piccolo esempio con PDO, ma non funziona cio' che vorrei fare io: ossia non inserire nulla in quanto vi é un errore nella seconda query. Se tengo il file cosi' la prima query viene eseguita mentre la seconda, ovviamente no, ma mi inserisce il dato della prima query, quello che non vorrei fare io, qualcuno puo' aiutarmi??



    <?php

    $hostname = 'localhost';
    $username = 'root';
    $password = '1234';

    try {
    $dbh = new PDO("mysql:host=$hostname;dbname=commit", $username, $password);
    echo 'Connected to database';

    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $dbh->beginTransaction();
    $dbh->exec("insert into libri (autore) values ('Joe')");
    $dbh->exec("insert into libri (autorasase) values ('Joe')");
    $dbh->commit();
    //chiusura database
    $dbh = null;
    }
    catch(PDOException $e)
    {
    $dbh->rollBack();
    echo "Failed: " . $e->getMessage();
    }

    ?>


  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2008
    Messaggi
    56

    Re: controllo INSERT

    Originariamente inviato da goxpix
    ...
    La mia domanda é: come faccio a controllare le due insert:
    ossia se l'insert 1 non va a buon fine non fare l'insert 2 e se l'insert2 non va a buon fine cancella l'insert1 e non fare inserimenti.
    ....
    ciao,

    sicuramente non e' elegantissimo pero... raggiunge lo scopo :-)

    Codice PHP:
    $skip false;
    $res=mysql_query("start transaction");
    $res=mysql_query("insert 1...."); 
    if (!
    $res$skip=true
    $res=mysql_query("insert 2...."); 
    if (!
    $res$skip=true
    if (
    $skip) {
      
    $res=mysql_query("rollback"); 
    } else {
      
    $res=mysql_query("commit");


  6. #6
    Originariamente inviato da goxpix
    CIAO, ecco qua un mio piccolo esempio con PDO, ma non funziona cio' che vorrei fare io: ossia non inserire nulla in quanto vi é un errore nella seconda query. Se tengo il file cosi' la prima query viene eseguita mentre la seconda, ovviamente no, ma mi inserisce il dato della prima query, quello che non vorrei fare io, qualcuno puo' aiutarmi??
    commit e rollback sono mutualmente esclusivi.

    O commit oppure rollback. O esegui oppure annulli le operazioni

    nel tuo script esegui il commit a prescindere prima di verificare l'esisto.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    323
    grazie a tutti per l'aiuto, siete grandi, ora mi studio per bene il PDO
    grazie ciao

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.