PHP / MySQL ПРИ ОБНОВЛЕНИИ ДУБЛИКАТА КЛЮЧА — произошла ВСТАВКА или ОБНОВЛЕНИЕ?

#php #mysql

#php #mysql

Вопрос:

У меня есть запрос MySQL ON DUPLICATE KEY UPDATE , который я запускаю из PHP-скрипта. Я хотел бы проверить UPDATE INSERT , произошло ли или. Как я могу это сделать?

Ответ №1:

Из документации MySQL:

«При ОБНОВЛЕНИИ ДУБЛИКАТА КЛЮЧА значение затронутых строк для каждой строки равно 1, если строка вставляется как новая строка, и 2, если обновляется существующая строка».

Вы можете использовать mysql_affected_rows() для определения количества затронутых строк.

Ответ №2:

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

Следующий запрос:

 INSERT INTO table ... ON DUPLICATE KEY UPDATE ...,  id = LAST_INSERT_ID(  id)
  

Где ‘id’ является первичным ключом в таблице, позволяет вызвать mysqli_affected_rows() , который вернет:

  1. 0 — строка существовала, ничего не обновлялось
  2. 1 — Строка не существует, вставлена
  3. существовала 2-строка, что-то обновлено

Комментарии:

1. Спасибо, это полезно знать … хотя я использую mysql, а не mysqli, поэтому я не уверен, допустимо ли значение return 0 для mysql_affected_rows()