Этот вопрос уже был дан ответ много раз: MySQL: LAST_INSERT_ID() returns 0
Вы используете эту функцию вне контекста. Она будет работать только если вы вставили строку непосредственно перед Thusly:
INSERT INTO 'subscription' (name) VALUES ('John Smith');
SELECT LAST_INSERT_ID() FROM subscription
Однако вы можете выбрать строку с наибольшим идентификатором, который логически было бы наиболее недавно добавил ...
SELECT MAX(id) FROM subscription;
Однако стандартный подход состоит в том, чтобы просто вызвать mysqli_insert_id
или mysql_insert_id
(в зависимости от того, используете ли вы MySQL-библиотеку mysqli или mysql. Я должен добавить, что библиотека mysql очень нецелесообразна для использования, поскольку она почти полностью не рекомендуется). Вот то, что все это будет идеально выглядеть следующим образом:
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
$mysqli->query("INSERT INTO 'subscription' (name) VALUES ('John Smith');");
printf ("New Record has id %d.\n", $mysqli->insert_id);
//Output is something like: New Record has id 999
Однако, если вы не вставили подписку в том же сценарии, как собирать самую последнюю строку ID, используйте «SELECT MAX» подход. Это кажется маловероятным, учитывая, что вы упомянули «1 скрипт»
Кроме того, если ваши идентификаторы не являются последовательными, или вы не имеете поле ID, или у вас есть ряд идентификаторов выше, чем тот, который вы только что добавили вы должны вероятно, рассмотрим столбец «date_added», чтобы определить, какой из них действительно был последним. Однако эти сценарии маловероятны.
'LAST_INSERT_ID()' is * connection specific *. Убедитесь, что вы не закрываете соединение и не открываете новое сообщение между запросами или не пытаетесь вызвать эту функцию из отдельного сценария. – Sammitch