Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why is mysqli_insert_id() always returning 0?

Tags:

I have the following code. The mysqli_insert_id() (in this case "$last_row"), which is supposed to return the last row of the table, is always returning 0. Why is it so?

<?php

include 'connect-db.php';
$last_row = mysqli_insert_id($connection);

if ($content != '') {
    $sql = "INSERT INTO myCity VALUES (NULL, 'Stuttgart', 'DEU', 'Stuttgart', 617000)";

    if (!mysqli_query($connection, $sql)) {
        die('Error: ' . mysqli_error($connection));
    }

    echo $last_row;
    mysqli_close($connection);
}
like image 597
Mumbo Jumbo Avatar asked Mar 11 '13 06:03

Mumbo Jumbo


1 Answers

mysqli_insert_id does not return the ID of the last row of the table. From the docs, it:

...returns the ID generated by a query on a table with a column having the AUTO_INCREMENT attribute. If the last query wasn't an INSERT or UPDATE statement or if the modified table does not have a column with the AUTO_INCREMENT attribute, this function will return zero.

(My emphasis)

That is, if you were to run it immediately after an insert that auto-generated an ID, on the same connection you did the insert with, it would return the ID generated for that insert.

This is illustrated by the example in the docs linked above:

$query = "INSERT INTO myCity VALUES (NULL, 'Stuttgart', 'DEU', 'Stuttgart', 617000)";
$mysqli->query($query);

printf ("New Record has id %d.\n", $mysqli->insert_id);
like image 129
T.J. Crowder Avatar answered Oct 12 '22 09:10

T.J. Crowder