我想跟踪使用 PDO 准备和执行执行查询时发生的错误类型。
例如,如果我必须插入电子邮件、姓名、出生日期,并且电子邮件需要唯一,而不是编写特殊查询来检查电子邮件是否已被使用,我想跟踪发生的错误并知道相同的内容。
您可以在插入查询周围使用 try/catch 块并在异常处理程序中处理双重电子邮件。
$sql = "INSERT INTO `mystuff` (email, name ) VALUES (:email, :name)";
try {
$sth = $dbh->prepare($sql);
$sth->execute(array(':email' => $email, ':name' => $name));
}
catch (Exception $e) {
echo 'email already taken';
}
当然,您必须配置 PDO,使其在错误时引发异常。
首先,您将配置您的数据库以放置一个UNIQUE KEY
ALTER TABLE yourtable ADD CONSTRAINT uniqukey_for_mail UNIQUE(email);
然后您将使用带有 ERRMODE_EXCEPTION 的 PDO
$bddConnect = new PDO('dsn',$user,$password);
$bddConnect->setAttribute(PDO::ATTR_ERRMOD,PDO::ERRMOD_EXCEPTION);
然后,当您更新或插入数据时,您只需使用 try/catch 包装查询,并检查您的错误是否违反约束
try{
$bddConnect->exec("UPDATE yourtable SET email='already in table EMAIL' WHERE
id='other id than the one that has the email'");
}catch(PDOException $e){
if(strpos('constraint violation',$e->getMessage())!==false){
echo "already taken";
}
}