Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di emu86
    Registrato dal
    May 2005
    Messaggi
    324

    [mysql] Problema inserimento record: campi vuoti invece di errore

    Ciao a tutti... ho un prblema con mysql:
    durante lo sviluppo di una applicazione ho notato una cosa strana: quando provo ad inserire dei record su una tabella mysql, anche se tutti i campi sono segnati come obbligatori (null non permesso) e per sbaglio uno o più campi mancano nella stringa sql, mysql inserisce una stringa vuota in caso di stringhe, 0 in caso di campi numerici, senza ritornare nessun errore.

    Come posso forzare la visualizzazione degli errori e bloccare l'esecuzione della query?
    Il problema si presenta sia con Storage Engine MyIsam sia InnoDB.

    La versione di MySQL è 5.1.63.

    Grazie mille per le risposte.

  2. #2
    Per quello che ricordo, nel caso che hai illustrato tu, a seconda di SQL_MODE si ottengono risultati diversi. Nel tuo caso SQL identifica che c'è un problema, segnala un WARNING (che puoi visualizzare o nella gestione del DB oppure com "echo mysql_error()" in PHP), ma esegue ugualmente l'inserimento lasciando i campi vuoi.

    Dovresti trovare il giusto settaggio per SQL_MODE, prova a cerca on-line. Al momento non ricordo quale sia...

  3. #3
    In questo caso l'SQL_MODE non c'entra, perché i valori di default sono sempre permessi, e le colonne hanno sempre un valore di default (0 se sono numeriche, '' se sono stringhe). NOT NULL non c'entra molto, perché dà errore solo se si tenta di inserire NULL. Ma NULL e '' sono due valori diversi (o meglio, NULL è un non-valore).

    Dovresti usare un trigger simile a questo:

    CREATE TRIGGER `xxxxxxx`
    BEFORE INSERT
    ON `tab_name`
    FOR EACH ROW
    BEGIN
    IF NEW.`col_name` = '' THEN
    SIGNAL SQLSTATE VALUE '45000'
    SET MESSAGE_TEXT = '[table:tab_name] - `col_name` column is not valid';
    END IF;
    END;
    STK/Unit: Unit Test framework per MariaDB
    http://stk.wikidot.com/stk-unit

  4. #4
    Utente di HTML.it L'avatar di emu86
    Registrato dal
    May 2005
    Messaggi
    324
    Il fatto è che in altre macchine (server a cui non posso accedere x copiare/vedere la configurazione) l'errore viene restituito senza bisogno di utilizzare un trigger.

  5. #5
    Se puoi connetterti a quei server, fai presto a controllare se è l'SQL_MODE. Non c'è bisogno di nessun permesso:

    SELECT @@session.sql_mode;

    Tra l'altro ti ho detto una stupidaggine, se il valore di default non è specificato esplicitamente molto probabilmente il problema è proprio quello. Scusami, sono stanco.

    per la connessione corrente puoi settare l'sql_mode così, senza avere permessi:

    SET @@session.sql_mode = 'STRICT_TRANS_TABLES,STRICT_ALL_TABLES';

    Un'altra causa possibile in teoria è lo strict mode di innodb.
    STK/Unit: Unit Test framework per MariaDB
    http://stk.wikidot.com/stk-unit

  6. #6
    Credo fermamente che la verifica del contenuto dei campi da inserire nel db debba essere fatta a priori direttamente nel form con un javascript oppure verificando il contenuto di $_POST prima di inizializzare la query.

    Inutile disturbare il db se i dati da inserire non sono congruenti. Non e' manco logico buttare direttamente nel db qualsiasi cosa provenga da un form.

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

  7. #7
    E io "credo fermamente" che se questa è la tua scelta meriti tutto il nostro supporto morale ma hai sbagliato forum

    Comunque non farlo con JavaScript, a livello di sicurezza non aggiungerebbe nulla.
    STK/Unit: Unit Test framework per MariaDB
    http://stk.wikidot.com/stk-unit

  8. #8
    Originariamente inviato da in the web
    E io "credo fermamente" che se questa è la tua scelta meriti tutto il nostro supporto morale ma hai sbagliato forum

    Comunque non farlo con JavaScript, a livello di sicurezza non aggiungerebbe nulla.
    credo fermamente di non averlo aperto io il thread

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

  9. #9
    credo fermamente che tu abbia ragione
    STK/Unit: Unit Test framework per MariaDB
    http://stk.wikidot.com/stk-unit

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.