Отображение соответствующих сообщений об ошибках для пользователей - PullRequest
1 голос
/ 26 марта 2011

ОБНОВЛЕНИЕ 1:

Теперь у меня есть следующий код:

} catch( PDOException $e ) {
    error_log( $e -> getMessage() );

    switch( $e -> getCode() ) {
        case 1452:
            echo "Sorry, the referral ID you have entered does not exist.";
            break;
        default:
            echo $e -> getMessage();      
    }
}

Но он продолжает выдавать мне следующую ошибку:

SQLSTATE [23000]: ограничение целостности нарушение: 1452 Не удается добавить или обновить дочерняя строка: ограничение внешнего ключа не удается (database1.table2, CONSTRAINT fk_referals_users1 FOREIGN KEY (users_id) ССЫЛКИ на пользователей (id) ON УДАЛИТЬ НЕТ ДЕЙСТВИЙ, ОБНОВЛЕНИЕ НЕТ ДЕЙСТВИЙ)

Если это не дает мне

Извините, у вас есть реферальный ID введено не существует.

по умолчанию: показывает полную ошибку 1452. Так как это ошибка 1452, не должна ли она идти в дело 1452?

ОРИГИНАЛЬНЫЙ ВОПРОС:

У меня есть следующий скрипт, который настроен для целей разработки. Когда это произойдет, я бы хотел отобразить более подходящие сообщения об ошибках.

SQLSTATE [23000]: ограничение целостности нарушение: 1452 Не удается добавить или обновить дочерняя строка: ограничение внешнего ключа не удается (database1. table2, ОГРАНИЧЕНИЕ fk_referals_users1 КЛЮЧЕВОЙ КЛЮЧ (users_id) users (id) ВКЛ УДАЛИТЬ НЕТ ДЕЙСТВИЙ ВКЛ ОБНОВЛЕНИЕ НЕТ ДЕЙСТВИЙ)

Это происходит, если введенное ими значение реферала не существует в таблице1, поэтому его нельзя вставить в таблицу2 из-за ограничений.

Это скрипт, который у меня сейчас есть. Как мне перехватить определенные сообщения, такие как приведенные выше и более, и отобразить их примерно так:

Извините, у вас есть реферальный ID введено не существует.

Это раздел, который я пытаюсь редактировать с точки зрения понятных сообщений об ошибках:

try {
    $DBH = new PDO( "mysql:host=localhost;dbname=database1", "user", "pass" );
    $DBH -> setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

    $STH = $DBH -> prepare( "insert into database1.table1 (display_name, email, password) values ( :display_name, :email, :password )" );

    $STH -> bindParam( ':display_name', $_POST['display_name'], PDO::PARAM_STR, 100 );
    $STH -> bindParam( ':email', $_POST['email'], PDO::PARAM_STR, 100 );
    $STH -> bindParam( ':password', $_POST['password'], PDO::PARAM_STR, 100 );

    $STH -> execute();

    try {
        $STH = $DBH -> prepare( "insert into database1.table ( username, status, users_id ) values ( :username, :status, :users_id )" );

        $strStatus = 1;

        $STH -> bindParam( ':username', $_POST['display_name'], PDO::PARAM_STR, 100 );
        $STH -> bindParam( ':status', $strStatus, PDO::PARAM_INT, 1 );
        $STH -> bindParam( ':users_id', $_POST['referer'], PDO::PARAM_INT, 1 );

        $STH -> execute();
    }

    $DBH = null;

    header( "Location: ".$_SERVER['PHP_SELF'] );
    exit;
} catch( PDOException $e ) {
    echo $e -> getMessage();
}

1 Ответ

1 голос
/ 26 марта 2011

Здесь выводится полное сообщение об исключении:

catch( PDOException $e ) {
    echo $e -> getMessage();
}

Здесь вы можете записать полное исключение и вывести любое понравившееся вам сообщение

catch( PDOException $e ) {
    error_log($e -> getMessage());
    echo "A error has occurred";
}

Если вы хотите обработать другоесообщение об ошибке отличается, вы можете включить код ошибки

catch( PDOException $e ) {
    error_log($e -> getMessage());
    switch($e->getCode()){
        case 23000:
            echo "Sorry, the referral ID you have entered does not exist."
            break;
        default:
            echo "A error has occurred";        
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...