У меня есть запрос вроде следующего:PDO lastInsertId() возвращает 0 при использовании при повторном обновлении ключа?
$a = $members->prepare("insert into a(name) values(:name)
on duplicate key update name = :name");
Тогда, когда я делаю:
$insert_id = $a->lastInsertId()
Если запрос успешно вставил строку, он возвращает идентификатор вставки, как и ожидалось, если он обновит строку, он также вернет обновленный идентификатор строки, как ожидалось (вроде). Но если он не вставил и не обновлял ничего, потому что все было одинаково, тогда он просто возвращает 0.
Я предполагаю, что это довольно логичное поведение по умолчанию, но есть способ изменить его, чтобы он мог вернуть идентификатор который он пытался обновить, например, когда он действительно что-то изменяет в строке.
Спасибо.
К счастью/к сожалению (в зависимости от того, как вы на это смотрите), MySQL имеет только последовательность 'AUTO_INCREMENT', поэтому, если у него нет нестандартных расширений, для' MySQL' '-> lastInsertId()' без аргументов отлично , вопреки «PostreSQL» и тому подобное. – Wrikken