2009-12-09 7 views
41

J'ai besoin d'insérer une longue ligne avec 32 champs dans une table MySQL.PHP MYSQL - Insérer dans sans utiliser les noms de colonnes mais avec le champ auto-incrémenté

Je voudrais faire quelque chose comme ceci:

$sql="insert into tblname values (... 32 fields ...)"; 

Il est évident que cela fonctionne très bien si les champs sont dans le même ordre que les champs de table MySQL. Mais, ma table a un identifiant d'auto-incrément comme c'est le premier champ.

Ce que je veux est de remplir tous les noms de table, sauf le premier (id).

Suggestions?

Répondre

64

Il suffit d'utiliser NULL comme première valeur, le champ autoincrement continuera à fonctionner comme prévu:

INSERT INTO tblname VALUES (NULL, ... 32 Fields ...) 
+0

Très bon. J'ai également trouvé une autre solution comme suit: $ resultx = mysql_query ("SHOW TABLE STATUS LIKE 'diretorio'"); $ auto_incr_val = mysql_result ($ resultx, 0, 'Auto_increment'); –

+12

@Paulo: vous ne savez pas à quel problème vous pouvez vous ouvrir en faisant cela. Utilisez NULL - c'est comme cela que MySQL l'a conçu pour fonctionner. – gahooa

+1

Il est généralement bon d'utiliser 0 pour déclencher auto_increment sauf si vous activez le mode NO_AUTO_VALUE_ON_ZERO. NULL, 0 et DEFAULT sont toutes les valeurs acceptées pour déclencher cela. Voir http://dev.mysql.com/doc/refman/5.6/en/sql-mode.html#sqlmode_no_auto_value_on_zero pour plus d'informations. – kojow7

12

Insérez NULL dans le champ d'incrémentation automatique.

Je recommande que, sauf s'il s'agit d'un script de piratage, vous utilisez des noms de champs. Le raisonnement est que votre code cassera si vous ajoutez un champ à la table ou changez leur ordre. Au lieu de cela, soyez explicite avec les noms de champs, et cela ira beaucoup mieux dans le futur.

-1

Nous devrions omettre les valeurs de la colonne quand nous essayons sans nom de colonne dans la requête d'insertion,

Advise si L'information ci-dessus est fausse.

-3

Voici un grand raccourci que je l'ai utilisé (avec la permission d'un ami qui l'a écrit pour moi)

$fieldlist=$vallist=''; 
foreach ($_POST as $key => $value) { 
$fieldlist.=$key.','; 
$vallist.='\''.urlencode($value).'\','; } 
$fieldlist=substr($fieldlist, 0, -1); 
$vallist=substr($vallist, 0, -1); 
$sql='INSERT INTO customer_info ('.$fieldlist.') VALUES ('.$vallist.')'; 
+2

Ce code est vulnérable à l'injection SQL. Lire la suite ici s'il vous plaît: http://stackoverflow.com/questions/11939226/sql-injections-and-adodb-library-general-php-website-security-with-examples/12123649 –

+0

@IliaRostovtsev - Alors que je suis d'accord avec vous et J'ai basculé vers PDO afin d'éviter l'injection SQL, je pense qu'il y a un avantage à répondre à la question en ce qui concerne le code affiché –

+1

Oui, probablement. Il vaut également la peine de mentionner les problèmes éventuels. (Je n'ai pas downvote, juste au cas où) –

Questions connexes