$wpdb->insert_id

2 нояб. 2016 г., 11:32:39
Просмотры: 28.5K
Голосов: 8

Я использую $wpdb->insert для вставки данных в таблицу моего плагина. Как мне получить id новой строки, которую я только что вставил? Поскольку у меня много пользователей, которые добавляют данные в таблицу, я не могу использовать $wpdb->insert_id Потому что это не обязательно будет последняя запись.

0
Все ответы на вопрос 2
3
16

Нет другого способа, но я не понимаю, зачем вам может понадобиться что-то кроме этого. Я считаю, что insert_id, доступный через $wpdb, возвращает последний ID именно для этого экземпляра WPDB - другие вставки не должны на это влиять, хотя я не уверен.

<?php

  $wpdb->insert("QUERY"); // Выполняем SQL-запрос на вставку

  $this_insert = $wpdb->insert_id; // Получаем ID последней вставленной записи

?>
2 нояб. 2016 г. 12:32:23
Комментарии

$wpdb является глобальной переменной, все запросы используют один и тот же экземпляр.

fuxia fuxia
2 нояб. 2016 г. 12:44:56

@toscho но влияет ли запрос другого пользователя на ID вставки, который вы получаете, если они вставляют запрос прямо между вашей вставкой и чтением?

Niels van Renselaar Niels van Renselaar
3 нояб. 2016 г. 15:55:45

Нет, не влияет. $wpdb является глобальной, но только в рамках одного запроса, она не разделяется между запросами разных пользователей. Поскольку она также не асинхронная, это будет работать так, как ожидается.

janh janh
8 окт. 2017 г. 10:31:27
1

$wpdb->insert_id является глобальной переменной в рамках сессии базы данных. Поскольку WordPress создает новую сессию для каждой пользовательской сессии, это не является проблемой, даже при использовании пула соединений. Единственное предостережение заключается в том, что эта переменная всегда будет содержать последний вставленный автоинкрементный ID, поэтому вам нужно проверять его после каждой вставки. Если вам действительно нужно получить список вновь вставленных записей, вы можете сделать это внутри хранимой процедуры и захватить его в транзакции. Или внутри триггера.

28 сент. 2020 г. 00:10:36
Комментарии

Конечно, важный шаг - сохранить это сразу после insert(), до того как другие вставки могут произойти из-за другого кода или плагинов и т.д.

DrLightman DrLightman
9 мая 2024 г. 16:10:06