Почему mysqli_insert_id () всегда возвращает 0?

У меня есть следующий код. Mysqli_insert_id () (в данном случае «$ last_row»), который должен возвращать последнюю строку таблицы, всегда возвращает 0. Почему это так?

<?php include('connect-db.php'); $submit_date = date("Ymd"); $content = mysqli_real_escape_string($connection, htmlspecialchars($_POST['editor'])); $ip_address = $_SERVER['REMOTE_ADDR']; $last_row = mysqli_insert_id($connection); if ($content != '') { $sql = "INSERT INTO source ( track_id, submit_date, ip, content) VALUES ('$last_row', '$submit_date','$ip_address','$content')"; if (!mysqli_query($connection,$sql)) { die('Error: ' . mysqli_error($connection)); } echo $last_row; mysqli_close($connection); } ?> 

mysqli_insert_id не возвращает идентификатор последней строки таблицы. Из документов это:

… возвращает идентификатор, сгенерированный запросом в таблице, с столбцом, имеющим атрибут AUTO_INCREMENT. Если последний запрос не был оператором INSERT или UPDATE или если в измененной таблице нет столбца с атрибутом AUTO_INCREMENT , эта функция будет возвращать ноль .

(Мой акцент)

То есть, если вы должны запустить его сразу после вставки, которая автоматически сгенерировала идентификатор, в том же соединении, в которое вы вставляли вставку, оно вернет идентификатор, сгенерированный для этой вставки.

Это иллюстрируется примером в документах, приведенных выше:

 $query = "INSERT INTO myCity VALUES (NULL, 'Stuttgart', 'DEU', 'Stuttgart', 617000)"; $mysqli->query($query); printf ("New Record has id %d.\n", $mysqli->insert_id); 

Чтобы получить результат, вы должны поместить

 $last_row = mysqli_insert_id($connection); 

после запроса INSERT

Для других людей, приезжающих сюда, возможно, вы попробовали INSERT IGNORE INTO и у вас есть значение UNIQUE которое уже было вставлено. В этом случае этот id равен нулю.

Также вы получите «ноль», если MySQL закончит соединение. Я не специалист по постоянным связям, но это может помочь кому-то?

Поскольку вы, вероятно, знаете, что расширение PHP «mysql» поддерживает постоянные соединения, но они были отключены в новом расширении «mysqli» – Peter Zaitsev