2011-09-20 2 views
46

Vous vous demandez s'il existe une version abrégée pour insérer un nouvel enregistrement dans une table dont la clé primaire est activée? (C.-à ne pas avoir à inclure la colonne clé dans la requête) permet de dire que la colonne de clé est appelée ID, et les autres colonnes sont Fname, Lname, et le site WebPHP mySQL - Insérer un nouvel enregistrement dans une table avec incrémentation automatique sur la clé primaire

$query = "INSERT INTO myTable VALUES ('Fname', 'Lname', 'Website')"; 
+0

vous avez la réponse juste là. Votre exemple devrait fonctionner comme prévu (l'ID d'analyse est un auto-incrémentation). – konsolenfreddy

+1

@konsolenfreddy: Il utilise le sytnax d'insertion qui nécessite que chaque valeur de colonne soit spécifiée. – webbiedave

+2

Je recommande contre ce type d'insertion sytnax dans les applications car si vous ajoutez des colonnes dans le futur (ou changez l'ordre des colonnes), vous devez revenir et modifier vos instructions SQL, même si ces colonnes ont des valeurs par défaut. S'il s'agit d'une mise à jour DB unique, alors ce n'est pas grave. – webbiedave

Répondre

94

Utilisez le mot-clé DEFAULT:

$query = "INSERT INTO myTable VALUES (DEFAULT,'Fname', 'Lname', 'Website')"; 

, vous pouvez également spécifier les colonnes, (ce qui est une meilleure pratique):

$query = "INSERT INTO myTable 
      (fname, lname, website) 
      VALUES 
      ('fname', 'lname', 'website')"; 

Référence:

+0

Oui, je sais qu'il est préférable de définir chaque colonne. Mais la table pour laquelle il est destiné ne sera pas modifiée, alors j'étais simplement curieux de savoir comment utiliser le moins de code pour faire l'affaire. Merci! – JimmyJammed

+4

"Ne sera pas modifié" est une hypothèse assez énorme. Peut-être que c'est une table unique et que vous l'abandonnez lorsque vous avez terminé avec cette tâche en cours, mais sinon qui sait quand les exigences métier vont changer de manière inattendue. Dans la grande majorité des cas, la personne qui doit maintenir le système suivant l'appréciera grandement si vous utilisez le second formulaire avec les noms des colonnes. – GrandOpener

5
$query = "INSERT INTO myTable VALUES (NULL,'Fname', 'Lname', 'Website')"; 

Tout en laissant la valeur de la La clé primaire AI NULL attribue une valeur incrémentée automatiquement.

+11

-1, '''' n'est pas égal à NULL. – Johan

+0

Ce comportement est vraiment hacky, et repose sur MySQL convertissant la chaîne vide en un entier (ce qui n'est pas un comportement strict), échouant sans erreur (qui est configurable) et en utilisant null comme normalement (où en devient null l'équiv pour DEFAULT). Je suggère vraiment de ne jamais l'utiliser. – scragar

+2

Ceci est un ancien: P J'ai mis à jour avec le null au lieu d'une chaîne vide. –

12

Je préfère ce syntaxis:

$query = "INSERT INTO myTable SET fname='Fname',lname='Lname',website='Website'"; 
+3

+1, je l'aime aussi, ne fonctionne que dans MySQL/ne fonctionne pas dans SQLite tho. –

4

Cette méthode est phpMyAdmin.

$query = "INSERT INTO myTable 
     (mtb_i_idautoinc, mtb_s_string1, mtb_s_string2) 
     VALUES 
     (NULL, 'Jagodina', '35000')"; 
+0

Si vous voulez donner une requête à PHP, vous devriez vraiment en faire une requête paramétrée. – GrandOpener

Questions connexes