Intereting Posts
is_dir () возвращает FALSE при передаче подпапки Ошибка сопоставления пути веб-сервера Eclipse с проектом PHP Как искать текст с помощью php if ($ text содержит «World») db2_execute возвращает «Describe Param Failed» и «Binding Error» Laravel: Где хранить данные и константы глобальных массивов? Windows Azure и web.config не работают с веб-сайтом PHP PHP – отображение состояния цикла Показать несколько видов в одной функции в Laravel Функция Coalesce для PHP? Запуск __call () в PHP, даже когда существует метод Выпадающий список HTML с полем ввода пользователя Добавление программно вкладки пользовательских настроек в данные продукта администратора в WooCommerce Необходимо проверить, что веб-сайт содержит сертификат ssl или нет, если да, то какова дата истечения срока действия сертификата с использованием php-скриптов PHP. Разделите многомерный массив в зависимости от значения поля. Как преобразовать двумерный массив в одномерный массив в php5

Как вставить строку и игнорировать только UNIQUE ошибки, не используя SELECT

У меня есть таблица с столбцом, который должен иметь UNIQUE значения (но это может быть также индекс UNIQUE с несколькими столбцами, проблема такая же). В моем PHP-скрипте мне нужно вставить строку в эту таблицу.

Я ищу способ, а не специфичный для MySQL, выйти из PHP-скрипта, если есть проблема, и проблема не является нарушением ограничения UNIQUE. Чтобы сделать вещи более легкими, я не хочу использовать запрос SELECT раньше: D

В настоящее время я делаю что-то вроде этого:

try { $stmt = $dbh->prepare($someinsertquery); $stmt->bindParam(':somecol', $somecol); $stmt->execute(); } catch (PDOException $e) { $errcode = $e->getCode(); if (! ($e->getCode() === '23000')) { echo 'Error inserting into db: ' . $e->getMessage(); var_dump($e->getTrace()); exit(); } } 

Проблема в том, что таким образом я пропускаю также ошибки, связанные с внешними ключами. Я думаю, что это нормально, если я не могу иметь проблемы с внешними ключами, вставляя новую строку, но что, если я буду менять таблицу в будущем? Я мог бы использовать

 PDOStatement::errorInfo[1] 

но это код ошибки, специфичный для драйвера . То же самое с ON DUPLICATE KEY UPDATE.