2010-02-09 33 views
8

Im trabajando en una tabla que tiene 4 columnas y la primera es un entero de incremento automático llamado id.PHP Mysqli insertando una fila en una tabla con la columna auto_increment

Si voy a insertar en esta tabla usando las declaraciones preparadas de mysqli, sigo teniendo problemas para insertar una consulta que funcione. Usando PHPmyAdmin Me dice que le dé NULL. He intentado esto:

$query = "INSERT INTO tbl (id, col2, col3, col4) VALUES ('NULL', ?, ?, ?)"; 
$stmt -> bind_param("ssi", $col2, $col3, $col4) 

y esto

$query = "INSERT INTO tbl (id, col2, col3, col4) VALUES (NULL, ?, ?, ?)"; 
$stmt -> bind_param("ssi", $col2, $col3, $col4) 

y sólo dará bind_param 3 argumentos (el último 3). Ninguno de esos trabaja. También intenté esto:

$null = NULL; 
$query = "INSERT INTO tbl (id, col2, col3, col4) VALUES (?, ?, ?, ?)"; 
$stmt -> bind_param("issi", $null, $col2, $col3, $col4); 

Ninguno de estos trabajos. ¿Hay una forma estandarizada de insertar en este tipo de tabla?

+0

¿Desea también insertar el campo auto-incremtn explícitamente? – Sarfraz

Respuesta

12

acaba de saltar al campo id, MySQL llenará automáticamente:

$query = "INSERT INTO tbl (col2, col3, col4) VALUES (?, ?, ?)"; 
$stmt->bind_param("ssi", $col2, $col3, $col4) 
+0

Muchas gracias. Esta respuesta debe marcarse como la respuesta correcta, por favor. – Edwinfad

2

Ésta

$query = "INSERT INTO tbl (id, col2, col3, col4) VALUES (NULL, ?, ?, ?)"; 
$stmt -> bind_param("ssi", $col2, $col3, $col4) 

debe trabajar con seguridad. ¿Cuál es el error exacto que obtienes?

Ahora me veo mejor, tiene $ query y $ stmt. ¿Qué tienes en el medio? Probablemente te falta algo de parte.

Debe ser

$stmt = $mysqli->prepare("INSERT INTO tbl (id, col2, col3, col4) VALUES (NULL, ?, ?, ?)"); 
$stmt -> bind_param("ssi", $col2, $col3, $col4); 
$stmt ->execute(); 
3

Esto debería funcionar, porque id se añade automáticamente (incrementado por esta razón) por MySQL:

$query = "INSERT INTO tbl (col2, col3, col4) VALUES (?, ?, ?)"; 

En algunos casos, es necesario insertar auto_incremtnt campo de forma explícita Si este es el caso, puede usar la declaración INSERT IGNORE, consulte el manual de mysql para obtener más información al respecto.

4

Si el campo es el idauto_increment, entonces simplemente no lo especifica en su consulta insert:

$query = "INSERT INTO tbl (col2, col3, col4) VALUES (?, ?, ?)"; 

Y, por supuesto, no trate de obligar a cualquier parámetro que ;-)


Como está generado por MySQL, no es necesario pasar esa columna.

Cuestiones relacionadas