У меня есть следующий код. 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