Visualizzazione risultati 1 fino 5 di 5

Discussione: Errore inserimento riga in Database

  1. #1
    elio14 non è connesso Neofita
    Data registrazione
    30-08-2003
    Messaggi
    19

    Predefinito Errore inserimento riga in Database

    Salve sono Elio,
    ieri ho ricevuto il passaggio da una versione MySql vecchia alla versione 5.6, ma adesso gli script PHP da me realizzati e perfettamente funzionanti adesso mi danno errore.

    Eccone un esempio:

    $dati=" INSERT INTO prodotti VALUES ('','nomeProdotto','descrizioneProdotto','sottocat egoria')";
    mysql_query ($dati, $link)
    or die ("Non riesco ad eseguire la query $dati");

    Dove il primo campo, che io lascio vuoto non è altro che ID dove nel DB io ho specificato auto-increment.

    Cosa potrebbe essere??

    Spero di non dover cambiare tutte le pagine dove io riporto la INSERT INTO.
    Grazie Mille.

  2. #2
    elio14 non è connesso Neofita
    Data registrazione
    30-08-2003
    Messaggi
    19

    Predefinito

    Ciao,
    ho visto che per rendere funzionante il tutto con Mysql 5.6 basta modificare i doppi apici senza contenuto('') con la scritta DEFAULT.

    $dati=" INSERT INTO prodotti VALUES (DEFAULT,'nomeProdotto','descrizioneProdotto','sot tocat egoria')";
    mysql_query ($dati, $link)
    or die ("Non riesco ad eseguire la query $dati");

    Però non posso andare a modificare tutte le INSERT INTO presenti nel mio sito; possibile che non ci sia un modo anche tramite phpMyAdmin per dirgli che i doppi apici deve considerarli come DEFAULT???

    Dato che con la vecchia versione funzionava!!!!


    *************
    DEVO FARE UN PASSO INDIETRO SU QUANTO SOPRA DESCRITTO.
    *************
    In realtà ho installato EasyPHP che porta con se una versione 5.6 di MySql e tutto funziona correttamente.
    A questo punto credo ci sia qualcosa che non sia andata a buon fine con l'aggiornamento fatto da Altervista.

    Spero possiate controllare e sistemare al più presto questo problema.

    Ringrazio.
    Ultima modifica di elio14 : 09-01-2017 alle ore 20.13.35

  3. #3
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Utilizzare una stringa vuota (i due apostrofi '') anziché il valore di default è un errore, non avrebbe dovuto funzionare nemmeno prima, quindi non so se ci sia un modo indolore per aggirare il problema.

    Anziché usare esplicitamente DEFAULT dovresti creare le interrogazioni elencando i campi da popolare:
    Codice:
    INSERT INTO prodotti (nome, descrizione, sottocategoria) VALUES ("nome del prodotto", "descrizione del prodotto", "sottocategoria del prodotto");
    in questo modo il codice diventa indipendente da (alcuni tipi di) cambiamenti nella base di dati.

    PS: Le funzioni mysql_* sono deprecate, dovresti sostituirle con mysqli o PDO.
    PPS: Anziché mostrare un messaggio di errore "Non riesco ad eseguire la query", usa funzioni come mysql_error per avere informazioni più precise sulla natura dell'errore.

  4. #4
    elio14 non è connesso Neofita
    Data registrazione
    30-08-2003
    Messaggi
    19

    Predefinito

    Ti ringrazio per la risposta.

    In realtà alcune guide di tutto rispetto riportano la sintassi anche utilizzando '' e non DEFAULT.
    Comunque prendo atto di quello che mi hai detto e mi obbligo a modificare le pagine del sito utilizzando la dicitura DEFAULT; in modo da non dover stravolgere tutto e magari non avere più questo tipo di problemi altri su altri server.

    Nel caso tu ne sappia qualcosa in più sarei grato se riuscissi ad inserire un ulteriore commento.

    Grazie.

  5. #5
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Potresti valutare l'uso della sintassi più "lunga", al posto di usare DEFAULT:
    Codice:
    INSERT INTO prodotti (nome, descrizione, sottocategoria) VALUES ("nome del prodotto", "descrizione del prodotto", "sottocategoria del prodotto");
    un po' di lavoro in più, ma ti permette di evitare problemi simili in futuro. Ci sono degli esempi interessanti su w3school.

    Nel caso tu ne sappia qualcosa in più sarei grato se riuscissi ad inserire un ulteriore commento.
    La differenza tra '', DEFAULT o NULL a volte può essere sottile... ad esempio, in una tabella con un campo string dotato di valore di default:
    Codice:
    ...
    string VARCHAR(32) DEFAULT 'nessuna stringa',
    ...
    viene inserita una stringa vuota (''):
    Codice:
    INSERT INTO ... (string) VALUES ('');
    Può risultare ambiguo: voglio inserire esattamente la stringa vuota, oppure voglio che sia usato il valore di default? Lo stesso usando NULL: voglio indicare che il valore è nullo, oppure voglio che sia usato quello di default? Usando la parola chiave DEFAULT non c'è ambiguità.
    Quando ci sono queste situazioni "poco chiare" c'è il rischio che il comportamento cambi da una versione di MySQL all'altra, come è successo a te.

    A prescindere dalla questione sul DEFAULT, però, il codice resta sensibile all'ordine delle colonne della tabella. Ad esempio, questa tabella:
    Codice:
    CREATE TABLE my_table (
        id INT PRIMARY KEY,
        name VARCHAR(32)
    );
    e quest'interrogazione:
    Codice:
    INSERT INTO my_table(4, 'nome');
    Se la tabella viene modificata aggiungendo una colonna dopo id e prima di nome:
    Codice:
    ALTER TABLE my_table ADD codice_fiscale VARCHAR(32) DEFAULT 'NA' AFTER id;
    l'interrogazione di prima non funziona più.
    Al contrario, usando
    Codice:
    INSERT INTO my_table (id, nome) VALUES (4, 'nome');
    l'interrogazione funziona sia prima che dopo la modifica.

    In ogni caso l'ultima parola spetta sempre alla documentazione ufficiale (per chi ha l'ardire di districarsi là in mezzo!).

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •