2009-12-09 13 views
41

Ho bisogno di inserire una lunga fila con 32 campi in una tabella MySQL.PHP MYSQL - Inserisci in senza nome colonna ma con campo autoincremento

mi piacerebbe fare qualcosa di simile:

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

Ovviamente funziona bene se i campi sono nello stesso ordine come i campi della tabella di MySQL. Ma la mia tabella ha un ID autoincremento come primo campo.

Quello che voglio è compilare tutti i nomi delle tabelle tranne il primo (id).

Suggerimenti?

risposta

64

Proprio utilizzare NULL come primo valore, il campo autoincrement continuerà a funzionare come previsto:

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

molto buona. Ho anche trovato una soluzione alternativa come segue: $ resultx = mysql_query ("MOSTRA TABELLA STATO COME 'diretorio'"); $ auto_incr_val = mysql_result ($ resultx, 0, 'Auto_increment'); –

+12

@Paulo: non hai idea di quali problemi potresti aprirti facendo così. Usa NULL - è il modo in cui MySQL lo ha progettato per funzionare. – gahooa

+1

In genere è bene usare 0 per attivare auto_increment a meno che non si attivi la modalità NO_AUTO_VALUE_ON_ZERO. NULL, 0 e DEFAULT sono tutti valori accettati per attivarlo. Vedi http://dev.mysql.com/doc/refman/5.6/en/sql-mode.html#sqlmode_no_auto_value_on_zero per maggiori informazioni. – kojow7

12

Inserire NULL nel campo di incremento automatico.

Si consiglia di utilizzare nomi di campi a meno che non si tratti di uno script di hacking. La logica è che il tuo codice sarà interrompa se aggiungi mai un campo al tavolo o cambi il loro ordine.

Invece, sii esplicito con i nomi dei campi, e andrà molto meglio in futuro.

-1

Dovremmo omettere eventuali valori di colonna quando cerchiamo senza nome di colonna in query di inserimento,

avvisare se le informazioni di cui sopra sono errate.

-3

Ecco una grande scorciatoia che ho usato (per gentile concessione di un amico che ha scritto per me)

$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

Questo codice è vulnerabile a SQL Injection. Leggi di più qui per favore: http://stackoverflow.com/questions/11939226/sql-injections-and-adodb-library-general-php-website-security-with-examples/12123649 –

+0

@IliaRostovtsev - Mentre sono d'accordo con te e sono passati a PDO per evitare l'iniezione SQL, ritengo che ci sia un vantaggio nel rispondere alla domanda in quanto riguarda il codice postato –

+1

Sì, probabilmente. Vale anche la pena di menzionare i possibili problemi. (Non ho fatto downvote, per ogni evenienza) –

Problemi correlati