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';
}
물론 오류가 발생하면 예외를 throw하도록 PDO를 구성해야합니다.
모두의먼저 방금 것, 업데이트 또는 datas를 삽입 할 때
$bddConnect = new PDO('dsn',$user,$password);
$bddConnect->setAttribute(PDO::ATTR_ERRMOD,PDO::ERRMOD_EXCEPTION);
그런 ERRMODE_EXCEPTION와 PDO를 사용합니다 그런 다음 UNIQUE KEY
ALTER TABLE yourtable ADD CONSTRAINT uniqukey_for_mail UNIQUE(email);
을 넣어 데이터베이스를 구성합니다 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