У меня есть таблица с столбцом, который должен иметь 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.