2011-04-30 13 views
6

no sé, ¿cuál es incorrecto en mi código.? Intento obtener la última identificación de inserción, su eco de 0? ¿alguna idea?mysqli insert_id()

public function __construct() { 
    $this->mysqli = new mysqli(MYSQLI_SERVER, MYSQLI_USER, MYSQLI_PWD, MYSQLI_DBNAME) or die ('Error with connecting to the database!');; 
} 
public function insert_id(){ 
    return $this->mysqli->insert_id; 
} 

$db->query("INSERT INTO user(f_name, l_name) VALUES('$f_name', '$l_name')); 
var_dump($db->insert_id()); // return 0? 
+1

¿Tiene un campo identificador único, incremento automático? –

+2

PHP MANUAL: ID generado para una columna AUTO_INCREMENT por la consulta anterior en caso de éxito, 0 si la consulta anterior no genera un valor AUTO_INCREMENT o FALSE si no se estableció ninguna conexión MySQL. –

+0

@Pekka: sí, id_user es la clave principal. – tonoslfx

Respuesta

11

Debe usarlo como sigue:

<?php 
$mysqli = new mysqli(SQLI_SERVER, MYSQLI_USER, MYSQLI_PWD, MYSQLI_DBNAME); 
if ($result = $mysqli->query("INSERT INTO user(f_name, l_name) VALUES('$f_name', '$l_name');")) { 
    echo 'The ID is: '.$mysqli->insert_id; 
} 
?> 
5

El mysqli_insert_id() devuelve el ID generado por una consulta en una tabla con una columna que tiene el atributo AUTO_INCREMENT. Si la última consulta no fue una instrucción INSERT o UPDATE o si la tabla modificada no tiene una columna con el atributo AUTO_INCREMENT, esta función devolverá cero.

Parece que no tiene un campo con el atributo AUTO_INCREMENT o si tiene uno no lo está utilizando en la consulta.