• User Attivo

    Intercettare errori con sql server

    Buongiorno a tutti
    Sto sviluppando per l'ufficio delle pagine php. In genere ho utilizzato mysql come database e non ho mai riscontrato questo errore che sto trovando utilizzando, causa forza maggiore, il database mssql.

    Devo fare dei semplici insert nel database in un for leggendo un file di testo

    $insert_Licenza = "INSERT Licenze (Codice_cliente, Codice_procedura, Sistema_operativo,
    Partita_iva_lic, Data_pubblicazione) VALUES ($CodiceTecnico, $CodiceProcedura, '$SistemaOperativo', '$PartitaIva', '$Data_Pubblicazione')";

    e la funzione che mi manda in esecuzione l'insert è
    $risultato = mssql_query($insert_Licenza);

    che dal manuale php dovrebbe restituire true se non ci sono errori e false se ci sono errori.
    Per cui testo questa variabile (può capitare di avere record duplicati che deve scartare), per vedere se è false.

    La testo così

    if( $risultato )
    echo "ok<br/>";
    else
    echo "errore<br/>";

    Nonostante faccia ciò, a video mi trovo sempre il messaggio

    mi trovo una serie di
    ok
    ok
    ok

    e
    Warning: mssql_query() [.....] message: The INSERT statement conflicted with the FOREIGN KEY constraint "FK__Licenze__Codice___1273C1CD". The conflict occurred in database "TEAMINT", table "dbo.TabProcedure", column 'Codice_procedura'. (severity 16) in C:\xampp\htdocs\xampp\teamsystem\teamint\acquisizionelicenze.php on line 81

    Warning: mssql_query() [.....]: Query failed in C:\xampp\htdocs\xampp\teamsystem\teamint\acquisizionelicenze.php on line 81
    errore

    cosa che mi sta facendo impazzire.
    Qualcuno mi sa aiutare??
    Grazie in anticipo


  • User Attivo

    Potresti utilizzare OR DIE();

    Es: $risultato = mssql_query($insert_Licenza) or die("Errore query");

    Ciao!


  • User Attivo

    Ciao,
    l'errore che ti segnala riguarda un conflitto con la FOREIGN KEY Codice_procedura della tabella TabProcedure.
    Probabilmente nella tabella TabProcedure non è presente il valore di $CodiceProcedura che stai tentando di inserire.

    Alessandro


  • User Attivo

    Ciao grazie ad entrambi per la risposta...
    Purtroppo se uso il die...la procedura esce dal for e non va avanti nell'elaborazione...
    Per quanto riguarda la risposta di Magicale, l'errore è una duplicazione di chiave ed è voluto, nel senso che se cerco di inserire una chiave duplicata, il programma si deve comportare uin un altro modo. Ora il mio problema è che non riesco ad intercettare l'errore perchè mi stampa quella cosa a video.


  • User Attivo

    Ciao,
    l'errore lo intercetti con il controllo che hai inserito.
    Se non vuoi visualizzare i Warning del php generati dall'utilizzo di una funzione, antemponi @ alla funzione quando la richiami.
    Ad esempio:
    [PHP]
    $risultato = @mssql_query($insert_Licenza);
    [/PHP]

    Se in funzione della chiave duplicata o meno lo script deve comportarsi in modi differenti, sarebbe meglio evitare di attendere l'errore generato dall'inserimento con chiave duplicata ed effettuare un controllo preventivo sulla chiave.

    Insomma... andrebbe seguito un vecchio detto che recita:
    Mai rimandare a domani quello che puoi fare oggi.

    Nel tuo caso... mai rimandare i controlli che puoi anticipare evitando di dover attendere messaggi di errore 🙂

    Alessandro


  • User Attivo

    Perfetto con @ funziona alla grande...e la funzione mi ritorna anche il vaolore corretto così posso intercettare....
    Hai ragione sul ragionamento di non rimandare....e sono daccordo ma io leggo un file di testo bello grosso e non so i dati che mi arrivano al momento dell'insert...rileggere per ogni chiave se esiste nel database mi comporterebbe un'allungamento dei tempi eccessivi nellelaborazione

    Grazie mille e buona pasqua