更新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)REFERENCES用户(id)ON 删除没有动作更新没有行动)
不应该给我
抱歉,您拥有的推介ID 输入不存在。
因为它将默认:显示完整的1452错误。因为它是一个1452错误,不应该转到案例1452吗?
原始问题:
我有以下脚本,用于开发目的。当它出现时,我想显示更合适的错误消息。
SQLSTATE [23000]:完整性约束 违规:1452无法添加或更新 子行:外键约束 失败(
database1
。table2
, 约束fk_referals_users1
FOREIGN KEY(users_id
)参考文献users
(id
)ON DELETE NO ACTION ON 更新无行动)
如果输入的引用值在table1中不存在,则会发生这种情况,因此由于约束而无法将其插入到table2中。
这是我目前拥有的脚本。如何捕获上面和上面的特定消息,并显示如下内容:
抱歉,您拥有的推介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();
}
答案 0 :(得分:1)
此处输出完整的异常消息:
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";
}
}