2009-12-09 13 views
41

Necesito insertar una fila larga con 32 campos en una tabla MySQL.PHP MYSQL - Insertar sin usar los nombres de columna pero con el campo autoincrement

me gustaría hacer algo como esto:

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

Obviamente funciona bien si los campos están en el mismo orden que los campos de la tabla de MySQL. Pero, mi tabla tiene una identificación de autoincremento ya que es el primer campo.

Lo que deseo es completar todos los nombres de las tablas, pero el primero (id).

Sugerencias?

Respuesta

64

sólo tiene que utilizar NULL como su primer valor, el campo autoincrement seguirá funcionando como se esperaba:

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

muy buena. También encontré una solución alternativa de la siguiente manera: $ resultx = mysql_query ("MOSTRAR ESTADO DE LA MESA COMO 'diretorio'"); $ auto_incr_val = mysql_result ($ resultx, 0, 'Auto_increment'); –

+12

@Paulo: no tienes idea a qué problemas te puedes enfrentar haciendo eso. Use NULL: es la forma en que MySQL lo diseñó para funcionar. – gahooa

+1

En general, está bien utilizar 0 para activar autoincremen a menos que habilite el modo NO_AUTO_VALUE_ON_ZERO. NULL, 0 y DEFAULT son todos valores aceptados para activar esto. Consulte http://dev.mysql.com/doc/refman/5.6/en/sql-mode.html#sqlmode_no_auto_value_on_zero para obtener más información. – kojow7

12

Inserta NULL en el campo de incremento automático.

Recomiendo que a menos que se trate de un script de hack, use nombres de campo. El razonamiento es que su código romper si alguna vez agrega un campo a la tabla o cambia su orden.

En su lugar, explíquese con los nombres de los campos, y será mucho mejor en el futuro.

-1

Nos debe omitir cualquier valores de columna cuando tratamos sin nombre de columna en consulta de inserción,

consejo es que si la información anterior es incorrecta.

-3

Aquí hay un gran atajo que he utilizado (cortesía de un amigo que lo escribió para mí)

$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

Este código es vulnerable a la inyección de SQL. Lea más aquí, por favor: http://stackoverflow.com/questions/11939226/sql-injections-and-adodb-library-general-php-website-security-with-examples/12123649 –

+0

@IliaRostovtsev - Aunque estoy de acuerdo con usted y cambié a PDO para evitar la inyección SQL, creo que hay un beneficio al responder la pregunta en lo que respecta al código publicado –

+1

Sí, probablemente. También vale la pena mencionar sobre los posibles problemas. (No devolví mi voto, por las dudas) –

Cuestiones relacionadas