Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    162

    Coerenza tra tabelle innodb

    Salve a tutti, avrei un piccolo problema con due tabelle con engine innodb.
    Mi è capitato un paio di volte che le due tabelle (principal_table e elements_eventi) perdano l'integrità referenziale. In questo momento la prima tabella ha 75 record mentre la seconda ne ha 74. Quando succede questo l'applicativo mi permette l'inserimento dei dati solo nella tabella principal_table. Tutto ciò si riprende quando azzerro entrambe le tabelle con Truncate.
    Questo è il codice che utilizzo per inserire "contemporaneamente" i dati. E' corretto usare solo questo sistema o mi conviene utilizzare anche commit e rollback?
    Codice PHP:
    $query "INSERT INTO principal_table (nome,cognome,codicefiscale,indirizzo,citta,provincia,cap,nazione,telefono,fax,email,fattura,categoria_a,cod_iva,int_fattura,indirizzo_fattura,indirizzo_int,citta_int,provincia_int,cap_int,nazione_int,mod_pagamento,prezzo,stato_pagamento,data,conferma,movimenta,iva) 
    VALUES (\"
    $resul_nome\",\"$resul_cognome\",\"$resul_codicefiscale\",\"$resul_indirizzo\",\"$resul_citta\",\"$resul_provincia\",\"$resul_cap\",\"$resul_nazione\",\"$resul_telefono\",\"$resul_fax\",\"$resul_email\",\"$resul_fattura\",\"$resul_categoria_a\",\"$resul_cod_iva\",\"$resul_int_fattura\",\"$resul_indirizzo_fattura\",\"$resul_indirizzo_int\",\"$resul_citta_int\",\"$resul_provincia_int\",\"$resul_cap_int\",\"$resul_nazione_int\",\"$resul_mod_pagamento\",\"$costi\",\"$stato_error\",now(),\"$conferma\",\"$movimenta\",\"$iva\")";

    $insert mysql_query($query$conn);
    $id     mysql_insert_id();

    $query_events "INSERT INTO elements_eventi (evento_id, email, cena_gala, costo_gala, evento_sociale, costo_evento, serv_navetta, costo_navetta, totale, visti) 
    VALUES (\"
    $id\",\"$resul_email\",\"{$_SESSION['cena_gala']}\",\"{$_SESSION['costo_gala']}\",\"{$_SESSION['evento_sociale']}\",\"{$_SESSION['costo_evento']}\",\"{$_SESSION['serv_navetta']}\",\"{$_SESSION['costo_navetta']}\",\"$totale_eventi\",\"$visti\")"
    grazie mille!
    Lothlorien

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    162
    In questo modo potrebbe andare o è preferibile impostare l'autocommit a 0?
    I dati vengono inseriti correttamente nelle due tabelle ma mi servirebbe sapere se con questo metodo posso essere sicuro.

    Codice PHP:
    @mysql_query("BEGIN"); 

    $query "INSERT INTO principal_table (nome,cognome,codicefiscale,indirizzo,citta,provincia,cap,nazione,telefono,fax,email,fattura,categoria_a,cod_iva,int_fattura,indirizzo_fattura,indirizzo_int,citta_int,provincia_int,cap_int,nazione_int,mod_pagamento,prezzo,stato_pagamento,data,conferma,movimenta,iva) 
    VALUES (\"
    $resul_nome\",\"$resul_cognome\",\"$resul_codicefiscale\",\"$resul_indirizzo\",\"$resul_citta\",\"$resul_provincia\",\"$resul_cap\",\"$resul_nazione\",\"$resul_telefono\",\"$resul_fax\",\"$resul_email\",\"$resul_fattura\",\"$resul_categoria_a\",\"$resul_cod_iva\",\"$resul_int_fattura\",\"$resul_indirizzo_fattura\",\"$resul_indirizzo_int\",\"$resul_citta_int\",\"$resul_provincia_int\",\"$resul_cap_int\",\"$resul_nazione_int\",\"$resul_mod_pagamento\",\"$costi\",\"$stato_error\",now(),\"$conferma\",\"$movimenta\",\"$iva\")"

    $insert mysql_query($query$conn); 
    $id     mysql_insert_id($conn); 

    $query_events "INSERT INTO elements_eventi (evento_id, email, cena_gala, costo_gala, evento_sociale, costo_evento, serv_navetta, costo_navetta, totale, visti) 
    VALUES (\"
    $id\",\"$resul_email\",\"{$_SESSION['cena_gala']}\",\"{$_SESSION['costo_gala']}\",\"{$_SESSION['evento_sociale']}\",\"{$_SESSION['costo_evento']}\",\"{$_SESSION['serv_navetta']}\",\"{$_SESSION['costo_navetta']}\",\"$totale_eventi\",\"$visti\")"

    $insert_events mysql_query($query_events$conn); 

    if(
    $insert && $insert_events

    @
    mysql_query("COMMIT"); 

    else 

    @
    mysql_query("ROLLBACK"); 

    Lothlorien

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    162
    dimenticavo...utilizzo le chiavi esterne.
    Le tabelle sono configurate in Innodb e i campi che utilizzo per unirle con il Join sono "evento_id int 11 primary key auto-increment" della tab principal_table e "evento_id int 11" della tab. elements_eventi.(Update e Delete ON CASCADE)
    Lothlorien

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    162
    ragazzi nessun suggerimento?
    Lothlorien

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.