50 votes

PHP mySQL - Insérer un nouvel enregistrement dans une table avec auto-incrémentation sur la clé primaire

Je me demande 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'est-à-dire sans avoir à inclure la colonne clé dans la requête). Disons que la colonne clé s'appelle ID, et que les autres colonnes sont Fname, Lname et Website.

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

0 votes

Vous avez la réponse juste là. Votre exemple devrait fonctionner comme prévu (en supposant que l'ID est un auto-incrément).

1 votes

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

2 votes

Je déconseille ce type d'insertion sytnax dans les applications car si vous ajoutez des colonnes à l'avenir (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 unique de la base de données, ce n'est pas un problème.

109voto

regality Points 3495

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 votes

Oui, je sais qu'il est préférable de définir chaque colonne. Mais comme la table à laquelle il est destiné ne sera pas modifiée, je me demandais comment utiliser le moins de code possible pour y parvenir. Merci.

5 votes

"Ne sera pas modifié" est une supposition assez énorme. Il s'agit peut-être d'un tableau unique que vous abandonnez lorsque vous avez terminé la tâche en cours, mais sinon, qui sait si les besoins de l'entreprise peuvent changer de manière inattendue. Dans la grande majorité des cas, la personne qui devra ensuite assurer la maintenance du système appréciera grandement que vous utilisiez la deuxième forme avec les noms de colonnes.

12voto

jenkin90 Points 187

Je préfère cette syntaxe :

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

3 votes

+1, je l'aime aussi, mais il ne fonctionne qu'avec MySQL / pas avec SQLite.

6voto

Korvin Szanto Points 2584
$query = "INSERT INTO myTable VALUES (NULL,'Fname', 'Lname', 'Website')";

Il suffit de laisser la valeur de la clé primaire AI NULL attribuera une valeur auto-incrémentée.

0 votes

Il s'agit d'un comportement très peu pratique, qui repose sur le fait que MySQL convertit la chaîne vide en un nombre entier (ce qui n'est pas un comportement strict), échoue sans erreur (ce qui est configurable) et utilise ensuite null comme il le ferait normalement (où null devient l'équivalent de DEFAULT). Je suggère vraiment de ne jamais utiliser cette méthode.

2 votes

Il s'agit d'une vieille question :P J'ai mis à jour avec le null au lieu d'une chaîne vide.

3voto

minimal Points 44

C'est la méthode de phpMyAdmin.

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

1 votes

Si vous donnez une requête à partir de PHP, vous devriez vraiment en faire une requête paramétrée.

0 votes

Si vous avez des valeurs dynamiques qui doivent être utilisées dans votre requête, oui, utilisez une instruction préparée. Si toutes les valeurs à insérer sont statiques (et ne contiennent pas de caractères de rupture), vous pouvez simplement utiliser une instruction préparée de base. query() .

0voto

Rahul Bharati Points 442

Vous pouvez également utiliser des guillemets simples vides pour la colonne auto_increment. quelque chose comme ceci. Cela a fonctionné pour moi.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X