2011-09-20 23 views
46

¿Se pregunta si hay una versión abreviada para insertar un nuevo registro en una tabla que tiene activada la clave principal? (Es decir, no tener que incluir la columna de clave en la consulta) permite decir la columna de clave se llama identificación, y las otras columnas son NombreA, Lname, y el Sitio WebPHP mySQL - Insertar nuevo registro en la tabla con autoincremento en la clave principal

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

tienes la respuesta justo allí. Su ejemplo debería funcionar como se espera (una ID de identificación es una autoincrementación). – konsolenfreddy

+1

@konsolenfreddy: Está usando el insert sytnax que requiere que se especifique cada valor de columna. – webbiedave

+2

Recomiendo este tipo de insertar sytnax en las aplicaciones porque si agrega columnas en el futuro (o cambia el orden de las columnas), debe volver y cambiar sus instrucciones SQL, incluso si esas columnas tienen valores predeterminados. Si se trata de una actualización de DB por única vez, entonces no es gran cosa. – webbiedave

Respuesta

94

utilizar la palabra clave DEFAULT:

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

Además, puede especificar las columnas, (que es mejor la práctica):

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

Referencia:

+0

Sí, sé que es mejor configurar cada columna. Pero la tabla en la que se encuentra no se verá alterada, así que tenía curiosidad sobre cómo usar la menor cantidad de código para hacer el truco. ¡Gracias! – JimmyJammed

+4

"No se alterará" es una suposición bastante grande. Tal vez sea una tabla única y la abandone cuando haya terminado con esta tarea actual, pero, de lo contrario, quién sabe cuándo los requisitos comerciales cambiarán de forma inesperada. En la gran mayoría de los casos, la persona que tiene que mantener el sistema a continuación lo apreciará mucho si usa el segundo formulario con los nombres de las columnas. – GrandOpener

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

Sólo dejando el valor de la La clave primaria AI NULL asignará un valor auto incrementado.

+11

-1, '''' no es igual a NULL. – Johan

+0

Esto es realmente un comportamiento hacky, y se basa en MySQL convertir la cadena vacía en un entero (que no es un comportamiento estricto), fallar sin un error (que es configurable) y luego usar nulo como lo haría normalmente (donde se convierte en nulo el equivalente para DEFAULT). Realmente sugiero no usar esto nunca. – scragar

+2

Este es un antiguo: P He actualizado con el nulo en lugar de una cadena vacía. –

12

Yo prefiero esta sintaxis:

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

+1, me gusta también, solo funciona en MySQL/no funciona en SQLite aunque. –

4

Este método es phpMyAdmin.

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

Si va a realizar una consulta desde PHP, realmente debería convertirla en una consulta parametrizada. – GrandOpener

Cuestiones relacionadas