mysqli->insert_id при обновлении (PHP)
У кого-нибудь это работает?:П
Я могу правильно получить insert_id при вставке, но не при обновлении. Конечно, столбец contactsId имеет значение AUTO_INCREMENT.
Весь код:
<?php
$mysqli = new mysqli('localhost', [USER], [PASSWORD], [DB]);
$mysqli->set_charset("utf8");
$query = 'INSERT INTO contacts (contactsName) VALUES ("Mariola")';
$result = $mysqli->query($query);
echo $mysqli->insert_id . '<br />';
$query = 'UPDATE contacts SET contactsName = "Mariola" WHERE contactsId = 289';
$result = $mysqli->query($query);
echo $mysqli->insert_id;
Выход:
1514
0
У меня есть запись с идентификатором 289, и обновление работает нормально.
2 ответа
Из документации MySQL по LAST_INSERT_ID()
:
Если expr
дается в качестве аргумента LAST_INSERT_ID()
значение аргумента возвращается функцией и запоминается как следующее значение, возвращаемое LAST_INSERT_ID()
, Это может быть использовано для симуляции последовательностей:
Создайте таблицу для хранения счетчика последовательности и инициализируйте его:
mysql> CREATE TABLE sequence (id INT NOT NULL);
mysql> INSERT INTO sequence VALUES (0);
Используйте таблицу для генерации порядковых номеров следующим образом:
mysql> UPDATE sequence SET id=LAST_INSERT_ID(id+1);
mysql> SELECT LAST_INSERT_ID();
UPDATE
инструкция увеличивает счетчик последовательности и вызывает следующий вызов LAST_INSERT_ID()
вернуть обновленное значение. SELECT
оператор извлекает это значение. mysql_insert_id()
Функция API C также может быть использована для получения значения. См. Раздел 20.6.7.37, " mysql_insert_id()
".
Может быть, что-то вроде этого будет работать:
$query = 'UPDATE contacts SET id = LAST_INSERT_ID(id), contactsName = "Mariola" WHERE contactsId = 289';
Это поведение очень четко описано в документе.
mysqli:: $ insert_id - mysqli_insert_id - возвращает автоматически сгенерированный идентификатор, использованный в последнем запросе
Если последний запрос не был оператором INSERT или UPDATE или измененная таблица не имеет столбца с атрибутом AUTO_INCREMENT, эта функция вернет ноль.