Я думал, что наиболее эффективным способом было создать поле таблицы UNIQUE
вместо таблицы, чтобы проверить существующие значения, прежде чем делать что-либо еще, но это использует два запроса. Вместо этого с полем UNIQUE
требуется только один запрос, потому что MySQL проверяет вас. Проблема в том, что повторяющиеся ошибки ввода вызывают внутреннюю ошибку сервера, с которой я не могу восстановить с PHP. Что вы предлагаете, что лучший способ избежать дублирования записей в PHP-приложении & MySQL?MySQL Как избежать повторяющихся записей из PHP
ответ
Вы можете использовать REPLACE INTO для своего запроса, сначала попробуете вставить, а затем удалите строку с тем же идентификатором и замените ее.
Это не то, что я хочу. Я не хочу ничего заменять, я просто хочу избежать ввода информации, которая уже существует. Вы сказали, что повторные ошибки не могут быть восстановлены, я думаю, что у Дагона другая идея. – boompow
- Применение
ON DUPLICATE KEY
INSERT INTO someTable (идентификатор, количество) ЗНАЧЕНИЯ ($ to_uid, $ send_amount) ПО DUPLICATE KEY суммы UPDATE = сумма + $ send_amount
https://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
2) Вы можете поймать дублирующее ключевое исключение. Пример PDO:
try{
$stmt->execute(...);
}
catch(PDOException $e){
if($e->errorInfo[1] == 1062){
// Mysql returned 1062 error code which means a duplicate key
}
}
Спасибо, но как насчет mysqli или CodeIgniter, что я использую? Простая попытка/улов не работает. – boompow
Поскольку 'mysqli' не генерирует исключения по умолчанию. Функции 'Mysqli' просто возвращают false. См. Этот ответ, если вы хотите сделать исключения mysqli для исключения из ошибок http://stackoverflow.com/questions/14578243/turning-query-errors-to-exceptions-in-mysqli Или просто проверить 'mysqli :: $ errno' для кода 1062 когда, например, 'mysqli :: query' возвращает false –
Угадайте, я спрошу, как это сделать в CodeIgniter. – boompow
НАЙДЕНО РЕШЕНИЕ!
CodeIgniter требует установки
$db['default']['stricton'] = TRUE;
с явным вызовом
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
для того, чтобы MySQL бросать исключения. Исключения также должны быть пойманы.
Я упомянул о 'mysqli_report (MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);' в комментариях к ответу. Крутой парень ответил. Отлично –
@Didar_Uranov Я благодарю вас за помощь, но на самом деле это было скорее проблемой CodeIgniter, которую вы не смогли решить. Без установки, о которой я говорил, MySQL не смог бы исключать исключения. – boompow
Вы можете использовать INSERT IGNORE
, чтобы предотвратить обновление строки и предотвратить исключение исключения из строки, если строка уже существует.
https://dev.mysql.com/doc/refman/5.5/en/insert.html
Если вы используете ключевое слово IGNORE, ошибки, возникающие при выполнении оператора INSERT игнорируются. Например, без IGNORE строка, которая дублирует существующий индекс UNIQUE или значение PRIMARY KEY в таблице , вызывает ошибку с повторяющимся ключом, и оператор прерывается. С IGNORE строка все еще не вставлена, но ошибки не возникает. Игнорируемые ошибки могут генерировать предупреждения вместо этого, хотя ошибки в дубликат-ключ делают нет.
- 1. Как избежать повторяющихся записей
- 2. Избегайте повторяющихся записей MySQL и PHP
- 3. Mysql - избежать повторяющихся значений
- 4. Ошибка обработки для повторяющихся записей - PHP MySQL
- 5. Как избежать повторяющихся записей в MongoDB?
- 6. Как избежать вставок повторяющихся записей из XML-файл
- 7. Как избежать вставки повторяющихся записей из исходной таблицы при слиянии?
- 8. MySql UPDATE только одна из повторяющихся записей
- 9. MySQL: Поиск нескольких повторяющихся записей
- 10. SQL Server - избежать вставок повторяющихся записей
- 11. Удаление повторяющихся записей в MySQL
- 12. LINQ к XML - избежать повторяющихся записей
- 13. Удаление повторяющихся записей из Присоединиться
- 14. Удаление повторяющихся записей из таблицы
- 15. как eleminate повторяющихся записей в MySQL
- 16. Как избежать повторяющихся значений
- 17. Манипулировать ошибку для повторяющихся записей - MySQL и PHP
- 18. Как избежать дублирования записей таблицы mysql?
- 19. Случайные данные без повторяющихся записей в MySQL
- 20. PHP MYSQL Повторяющихся строк фильтр
- 21. Удаление повторяющихся записей из таблицы
- 22. Как избежать добавления повторяющихся записей в arraylist объектов
- 23. Удаление повторяющихся записей из xml
- 24. вставить в MYSQL результат повторяющихся записей
- 25. Предотвращение создания повторяющихся записей в PHP
- 26. PHP показать записей из MySQL
- 27. Количество повторяющихся записей на столе MySQL
- 28. MySql, чтобы получить последние записи повторяющихся записей
- 29. Запрос MySQL при группировке повторяющихся записей
- 30. CloudKit: Предотвращение повторяющихся записей
Лучше проверить и подтвердить дублирование перед запуском запроса на вставку. – Garry
@nedstark. Не лучше ли с ограничением 'UNIQUE', быстрее? – boompow
«Проблема в том, что повторяющиеся ошибки ввода вызывают внутреннюю ошибку сервера, из-за которой я не могу восстановить с PHP», что звучит странно, объясните, пожалуйста, –