Я хотел бы знать, возможно ли получить имя столбца, который сделал повторяющуюся ошибку на вставке?
Например, с уникальным ключом для имени пользователя и другим уникальным ключом для электронной почты:
try{
$pdo->query("INSERT INTO `table`(`username`,`email`)`VALUES('Superman','[email protected]')");
} catch (PDOException $e) {
if($e->errorInfo[0] == '23000' && $e->errorInfo[1] == '1062'){
throw new CustomException("Bla bla already exists");
// How does we get the duplicated column and then display "Email already exists" or "Username already exist"} else {
throw $e;
}
}
Как мы получаем информацию о дублированном столбце и затем отображаем «Электронная почта уже существует» или «Имя пользователя уже существует» вместо «Дублированная запись (хорошо, но какая?)
Спасибо,
Вы можете проверить значение в db или захватить имя столбца в сообщении об ошибке для ваших пользователей.
try{
$pdo->query("INSERT INTO `table`(`username`,`email`) VALUES ('Superman','[email protected]')");
} catch (PDOException $e) {
if (preg_match("/Duplicate entry .+ for key '(.+)'/", $e->getMessage(), $matches)) {
throw new CustomException($matches[1]." already exist");
} else {
throw $e;
}
}
также, возможно, вы предпочитаете использовать Exec команда для «строки результата без результата».
$affectedRow = $pdo->exec("INSERT INTO `table`(`username`,`email`) VALUES ('Superman','[email protected]')");
Спасибо за идею. Не думаю, что эта ошибка может дать мне эту информацию.
Так что это будет выглядеть так:
try {
$query = $this->dbh->prepare('INSERT INTO users (username,email) VALUES ("test", "test")');
$result = $query->execute();
} catch (PDOException $e) {
if( $e->errorInfo[0] == '23000' && $e->errorInfo[1] == '1062' ){
if( strpos($e->getMessage(), 'username') == true ) $result = 'duplicate_username';
elseif( strpos($e->getMessage(), 'email') == true ) $result = 'duplicate_email';
} else {
throw $e;
$return = false;
}
}
В основном делаю работу.
Спасибо,