Solución:
mysqli_insert_id
lo hace no devuelve el ID de la última fila de la tabla. De los documentos, es:
… 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
INSERT
oUPDATE
declaración o si la tabla modificada no tiene una columna con laAUTO_INCREMENT
atributo, esta función devolverá cero.
(Mi énfasis)
Es decir, si lo ejecutara de inmediato después una inserción que genera automáticamente una ID, en la misma conexión con la que hizo la inserción, devolvería la ID generada para esa inserción.
Esto se ilustra con el ejemplo en los documentos vinculados anteriormente:
$query = "INSERT INTO myCity VALUES (NULL, 'Stuttgart', 'DEU', 'Stuttgart', 617000)";
$mysqli->query($query);
printf ("New Record has id %d.n", $mysqli->insert_id);
Para obtener el resultado, debe colocar el
$last_row = mysqli_insert_id($connection);
después de su consulta INSERT
Para otras personas que vienen aquí, tal vez lo intentaste INSERT IGNORE INTO
y tienes un UNIQUE
valor que ya se insertó. En ese caso, esta identificación es cero.
También obtendrá “cero” si MySQL se queda sin conexiones. No soy un experto en conexiones persistentes, pero ¿esto podría ayudar a alguien?
Como probablemente sepa, la extensión PHP “mysql” admitía conexiones persistentes, pero se deshabilitaron en la nueva extensión “mysqli” –Peter Zaitsev