Мой плагин wordpress имеет таблицу с AUTO_INCREMENT полем первичного ключа с идентификатором. Когда в таблицу вставлена новая строка, я хотел бы получить значение ID вставки.
Особенностью является использование AJAX для отправки данных на сервер для вставки в БД. Идентификатор новой строки возвращается в ответе AJAX для обновления состояния клиента. Возможно, что несколько клиентов одновременно отправляют данные на сервер. Итак, я должен убедиться, что каждый запрос AJAX получит в ответ EXACT новый идентификатор строки.
В PHP для этой функции существует метод mysql_insert_id. Но он действителен для условия гонки, только если аргумент link_identifier последней операции. Моя операция с базой данных находится на $wpdb. Как извлечь link_identifier из $wpdb, чтобы убедиться, что mysql_insert_id работает? Есть ли другой способ получить идентификатор последней вставленной строки из $wpdb?
Спасибо.
Сразу после $wpdb->insert()
, который делает вставку, сделайте следующее:
$lastid = $wpdb->insert_id;
Подробнее о том, как делать вещи, можно найти в wordpress codex. Подробности выше были найдены здесь на странице wpdb
$lastid = $wpdb->$insert_id
?
Вот как я это сделал, в моем коде
...
global $wpdb;
$query = "INSERT INTO... VALUES(...)" ;
$wpdb->query(
$wpdb->prepare($query)
);
return $wpdb->insert_id;
...
$wpdb->query
возвращает $wpdb->query
затронутых строк, а $wpdb->insert_id
имеет последний вставленный идентификатор. Спасибо!
Что-то вроде этого тоже должно это сделать:
$last = $wpdb->get_row("SHOW TABLE STATUS LIKE 'table_name'");
$lastid = $last->Auto_increment;
Ввод вызова mysql_insert_id()
внутри транзакции должен сделать это:
mysql_query('BEGIN');
// Whatever code that does the insert here.
$id = mysql_insert_id();
mysql_query('COMMIT');
// Stuff with $id.
$wpdb->dbh
, но он определен какprotected $dbh;
... так что вы не можете получить к нему доступ напрямую, поэтому используйте ответ ниже :)