Я хотел бы знать, возможно ли получить имя столбца, которое сделало дублирующуюся ошибку в INSERT?
Например, с уникальным ключом по имени пользователя и другим уникальным ключом по электронной почте:
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;
}
}
Как получить дублированную информацию о столбцах, а затем отобразить "Email уже существует" или "Имя пользователя уже существует" вместо "Дублировать запись (ok, но какой?))
Спасибо,
Спасибо за идею. Не думал, что ошибка может дать мне эту информацию. Так оно и получится:
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;
}
}
В основном выполняю работу.
Спасибо,
Вы можете проверить значение в имени db или grab colum в сообщении об ошибке для ваших пользователей.
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 для строки запроса non result.
$affectedRow = $pdo->exec("INSERT INTO 'table'('username','email') VALUES ('Superman','[email protected]')");