Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13

Discussione: Primary Key

  1. #1

    Primary Key

    Codice:
    Codice PHP:
    /* -- Salvataggio di alcune Informazioni nella tabella di Sezione -- */
            
    $query_user "INSERT INTO $username (category_photo, name_photo, title_photo, sub_photo) VALUES ('$sec', '$filename', '$title_html', '$sub')";
            
    mysql_query ($query_user) or die (mysql_error()); 
    Tabella:
    Codice PHP:
    "CREATE TABLE IF NOT EXISTS $nickname ( 
                                                id VARCHAR(10) default NULL,
                                                name VARCHAR(255) default NULL, 
                                                surname VARCHAR(255) default NULL,
                                                nickname VARCHAR(255) default NULL, 
                                                day INT(2) default NULL, 
                                                month INT(2) default NULL, 
                                                year INT(4) default NULL, 
                                                email VARCHAR(255) default NULL, 
                                                pass VARCHAR(500) default NULL, 
                                                password VARCHAR(256) default NULL,
                                                oldpass VARCHAR(256) default NULL,
                                                category_photo VARCHAR(10) default NULL,
                                                name_photo VARCHAR(500) default NULL,
                                                title_photo VARCHAR(500) default NULL,
                                                sub_photo VARCHAR(50) default NULL,
                                                PRIMARY KEY ( id ) ) 
    Mi da questo errore:
    Duplicate entry '' for key 'PRIMARY'

    Ho letto articoli su come risolvere questo problema, come per esempio:
    "La Primary Key è il campo utilizzato per identificare le voci univoche nel database. L'errore significa che hai già una voce con una chiave primaria corrispondente a quello che stai cercando di inserire. Se stai cercando di modificare una voce esistente, probabilmente avrete bisogno di aggiungere una clausola che consente di verificare se la voce esiste e modifica di conseguenza il comando MySQL."

    Ho cambiato un paio di cose, ma continua a darmi errore, come mai?

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    tu hai come campo chiave primari il field "id" che è un varchar di default uguale a NULL... se fai un inserimento con INSERT senza assegnare alcun valore a tale campo tutti i record avrebbero lo stesso valore (cioè NULL) ripetuto, cosa "vietata" (da cui l'errore)... devi:

    - con l'INSERT immettere anche un valore univoco per il campo id
    - utilizzare una tipologia differente per id: solitamente si usa un intero autoincrementante

  3. #3
    Originariamente inviato da eiyen
    - con l'INSERT immettere anche un valore univoco per il campo id
    - utilizzare una tipologia differente per id: solitamente si usa un intero autoincrementante
    Il fatto è che, ID rappresenterebbe un varchar random unico per utente creato al momento della registrazione, quindi una volta creato non si dovrebbe più interagire con esso (con l'id), credo, potrei sbagliare. Quindi sarebbe scomodo immettere un valore ogni INSERT all'id.

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    Il problema non è il valore del campo, ma la sua gestione: come dicevo... quando fai INSERT - nello snippet che hai postato - non valorizzi tale campo, da cui probabilmente l'errore... quello che tu dici ha più senso nel caso di un UPDATE, magari... ma creando un nuovo record (INSERT appunto) il campo "id" andrà valorizzato in qualche modo...

  5. #5
    Originariamente inviato da eiyen
    Il problema non è il valore del campo, ma la sua gestione: come dicevo... quando fai INSERT - nello snippet che hai postato - non valorizzi tale campo, da cui probabilmente l'errore... quello che tu dici ha più senso nel caso di un UPDATE, magari... ma creando un nuovo record (INSERT appunto) il campo "id" andrà valorizzato in qualche modo...
    Giusto, infatti ho notato che nella record creata, viene attribuito a tutte le celle il valore di NULL tranne per ID, che resta vuoto e per i quattro campi dell'INSERT a cui viene attribuito il loro valore.
    Quindi dovrei fare cosi?
    Codice PHP:
    /* -- Salvataggio di alcune Informazioni nella tabella di Sezione -- */
            
    $query_user "INSERT INTO $username (id, category_photo, name_photo, title_photo, sub_photo) VALUES ('NULL', '$sec', '$filename', '$title_html', '$sub')";
            
    mysql_query ($query_user) or die (mysql_error()); 

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    98
    per come è definito il campo id sei costretto a valorizzarlo sempre con un valore mai prima inserito... la query sopra è sbagliata, perché essendo id una primary key non può assumere sempre il valore 'null' (come stringa), inoltre direi che è sbagliato anche mettere come default di id un null (non stringa), tanto non potrà mai assumere NULL come valore

  7. #7
    Originariamente inviato da xproj
    per come è definito il campo id sei costretto a valorizzarlo sempre con un valore mai prima inserito... la query sopra è sbagliata, perché essendo id una primary key non può assumere sempre il valore 'null' (come stringa), inoltre direi che è sbagliato anche mettere come default di id un null (non stringa), tanto non potrà mai assumere NULL come valore
    Ho capito, allora risolverò tutto con altra maniera.
    Grazie Mille!

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    98
    il problema è che mysql ti fa passare la sintassi di creazione della tabella (e non dovrebbe) ma poi quando crea la tabella cmq id non ha default null... questo ti ha dato l'illusione di poter usare 'null' o null

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    forse ti basta cambiare il campo come "autoincrementante"... vedi un po'...

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    98
    Originariamente inviato da eiyen
    forse ti basta cambiare il campo come "autoincrementante"... vedi un po'...
    un varchar() per ovvii motivi non può essere autoincrementale...

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.