我想跟踪使用PDO准备并执行时执行查询时发生的错误类型。错误类型的错误mySql PDO php
例如,如果我必须插入电子邮件,名称,DOB,并且电子邮件要求是唯一的,而不是写一个特殊查询来检查电子邮件是否已被采用,我想跟踪发生的错误并知道一样。
我想跟踪使用PDO准备并执行时执行查询时发生的错误类型。错误类型的错误mySql PDO php
例如,如果我必须插入电子邮件,名称,DOB,并且电子邮件要求是唯一的,而不是写一个特殊查询来检查电子邮件是否已被采用,我想跟踪发生的错误并知道一样。
您可以在插入查询周围使用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);
则可以使用PDO与ERRMODE_EXCEPTION
$bddConnect = new PDO('dsn',$user,$password);
$bddConnect->setAttribute(PDO::ATTR_ERRMOD,PDO::ERRMOD_EXCEPTION);
然后当你更新或插入DATAS,你就只能以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";
}
}
防止错误通常比修复它们更好。 – David
但我宁愿做一个查询而不是两个? – geekman
无论哪种方式,如果失败,最终只能执行一个查询。只有在没有电子邮件的情况下,它才会完成两个查询,并且查询不会很长。 – David