Как найти в PHP, какая часть запроса «ВСТАВИТЬ… ПРИ ОБНОВЛЕНИИ ДУБЛИКАТА КЛЮЧА …» выполнена успешно?

#php #mysql #auto-increment

#php #mysql #автоматическое увеличение

Вопрос:

У меня есть таблица MySQL, в которой нет поля AUTO_INCREMENT. В PHP я запускаю этот простой запрос:

 mysql_query("INSERT INTO table ... ON DUPLICATE KEY UPDATE ....");
  

Мне нужно иметь возможность определять, была ли новая строка вставлена в таблицу или была обновлена старая строка? Возможно ли это как-то?

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

1. Хорошо, у вас есть ключ в базе данных? (вы не указали конкретно)

2. У меня есть идентификационный ключ в таблице, но это не AUTO_INCREMENT. И я также забыл упомянуть, что я не хочу запускать другой запрос. Я хочу найти решение только в PHP, без дополнительного запроса.

3. попробуйте mysql_affected_rows(). Он должен вернуть 1 для простой вставки и 2 для обновления дубликата ключа (я думаю, прошло много времени с тех пор, как я пробовал это).

4. @Marc B, я бы предложил опубликовать этот комментарий в качестве ответа 😉 И из dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html — » При ОБНОВЛЕНИИ ДУБЛИКАТА КЛЮЧА значение затронутых строк для каждой строки равно 1, если строка вставлена как новая строка, и 2, если обновляется существующая строка. »

5. @Binary: вы продолжаете и публикуете это. Вы нашли время, чтобы посмотреть это в руководстве.

Ответ №1:

mysql_affected_rows() возвращает 1 при вставке (потому что он вставил одну строку) и 2 при обновлении (потому что сначала он попытался вставить, а затем обновил, или что-то в этом роде).

Это когда вы просто пытаетесь добавить одну строку. Вы также можете использовать ON DUPLICATE KEY UPDATE предложение для многострочных вставок, и тогда вы получите сумму 1 и 2 для всех строк.