PHP получает идентификатор последних данных [закрыто]

avatar
mrdenizlp
1 июля 2021 в 18:46
199
2
-1

Я новичок в языке php, и я хочу добавить идентификатор последних данных в базе данных в виде целого числа в переменную. можете ли вы помочь мне, как я могу это сделать

вот некоторые из моих попыток:


$lastID = mysqli_query("SELECT * from posts ORDER BY post_id DESC LIMIT 1");

$lastID++;
$lastID = mysqli_query("SELECT * from posts ORDER BY post_id DESC LIMIT 1");
$lastid = (int)$lastID;
$lastid++;
Источник
M. Eriksson
1 июля 2021 в 18:50
0

Используйте mysqli_insert_id, чтобы получить последний вставленный идентификатор, если он находится во время того же соединения. Это не сработает, если запись была вставлена ​​во время другого соединения (как в предыдущем запросе). Также полезно помнить, что выбор последнего вставленного идентификатора может привести к состоянию гонки, в зависимости от того, что вы планируете делать с идентификатором.

RiggsFolly
1 июля 2021 в 18:53
0

Вы должны ПОЛУЧИТЬ результат из набора результатов. Он не доставляется в качестве возврата из mysql_query() сотни примеров в руководстве по PHP

RiggsFolly
1 июля 2021 в 19:06
0

Привет @MagnusEriksson, я не думаю, что это то, о чем спрашивает ОП.

Ответы (2)

avatar
Seeker
1 июля 2021 в 19:06
0

Сначала убедитесь, что вы подключились к серверу mysql:

$db_handle = mysqli_connect($db_server_name, $db_user_name, $db_password);

Выберите базу данных, с которой вы хотите работать:

mysqli_select_db($db_handle,$database_name);

напишите свой запрос. Следующий запрос даст вам наибольшее число post_id:

$query = "SELECT post_id FROM posts ORDER BY post_id DESC LIMIT 1";

запрос mysql:

$result = mysqli_query($db_handle, $query);

Выберите данные в виде массива строк из результата запроса:

$row = mysqli_fetch_array($result, MYSQLI_ASSOC);

поместите значение 'post_id' из массива строк в переменную:

$lastid = $row['post_id'];
RiggsFolly
1 июля 2021 в 19:11
2

Вы действительно должны использовать параметр 4 `connect с параметром 4, являющимся именем базы данных, тогда вам не нужен select db

avatar
O. Jones
1 июля 2021 в 19:08
2

Во-первых, используйте этот запрос.

SELECT MAX(post_id) post_id FROM posts

Это более эффективно, чем запрос в вашем примере, особенно если post_id является первичным ключом.

Во-вторых, сделайте это.

$result = mysqli_query($connection, "SELECT MAX(post_id) post_id FROM posts");
if (!$result) { 
   /* the query failed, report an error */
} else {
    $row = mysqli_fetch_object($result);
    $lastID = $row->post_id;
    $lastID += 1;
}

В-третьих, остерегайтесь возможного состояния гонки. Если другой экземпляр программы вставляет что-то в таблицу между моментом, когда вы получаете MAX(post_id) и моментом, когда вы используете увеличенное значение, увеличенное значение может ошибаться. Такого рода проблемы очень трудно обнаружить при тестировании, потому что вы должны правильно настроить параллелизм. Но он будет появляться в рабочей среде, когда ваше приложение занято.

RiggsFolly
1 июля 2021 в 19:10
0

Но вы также пропустили FETCH?

mrdenizlp
1 июля 2021 в 19:15
0

это тоже работает, но я получил ошибку (неопределенное свойство: mysqli_result::$post_id) (это может быть от меня), но это работает

O. Jones
1 июля 2021 в 19:16
1

@RiggsFolly краснеет, ты прав. Я починил это.

RiggsFolly
1 июля 2021 в 19:17
1

:) :) :) Что ж, спасибо за юмористический комментарий, рассмешил

O. Jones
1 июля 2021 в 19:20
0

Да, это все веселье и игры, пока кто-нибудь не достигнет состояния гонки. :-)