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