0

我想跟踪使用 PDO 准备和执行执行查询时发生的错误类型。

例如,如果我必须插入电子邮件、姓名、出生日期,并且电子邮件需要唯一,而不是编写特殊查询来检查电子邮件是否已被使用,我想跟踪发生的错误并知道相同的内容。

4

2 回答 2

1

您可以在插入查询周围使用 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,使其在错误时引发异常。

于 2012-09-26T08:54:30.310 回答
1

首先,您将配置您的数据库以放置一个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";
    }
}
于 2012-09-26T08:55:23.007 回答