#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 для всех строк.