2012-09-26 3 views
0

PDO 준비 및 실행을 사용하여 쿼리를 실행하는 동안 발생한 오류 유형을 추적하고 싶습니다.오류 유형 추적 mySql PDO php

예를 들어 전자 메일이 이미 찍혔는지 확인하기 위해 특수 쿼리를 작성하는 대신 전자 메일 이름, DOB, 고유 이름이 필요한 전자 메일을 삽입해야하는 경우 발생한 오류를 추적하고 싶습니다. 같은 것을 아십시오.

+2

오류 방지는 종종 오류를 수정하는 것보다 낫습니다. – David

+0

하지만 두 가지 쿼리 대신 하나의 쿼리를 사용하고 싶습니다. – geekman

+0

어느 쪽이든, 실패하면 하나의 쿼리가 끝납니다. 동일한 전자 메일이 없을 때만 두 개의 쿼리를 수행 할 것이고 쿼리는 오래 걸리지 않을 것입니다. – David

답변

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'; 
} 

물론 오류가 발생하면 예외를 throw하도록 PDO를 구성해야합니다.

모두의
+0

예. 나는 이것에 대해 생각했다. 그러나 다른 것이 잘못되어도 '이메일 가져 갔는지'를 보여주지 않겠는가 ?? 오류가 발생했는지 확인하는 방법이 없습니까? – geekman

+0

http://php.net/manual/en/pdo.errorinfo.php 살펴보기 catch 블록에서 다른 오류 상황을 처리하기 위해 SWITCH를 사용할 수 있습니다. – JvdBerg

+0

감사합니다. 감사합니다. – geekman

1

먼저 방금 것, 업데이트 또는 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"; 
    } 
} 
+0

다시 한 번 ... 다른 것이 잘못되어도 '이메일로 가져 왔음'을 표시하지 않겠습니까 ?? 오류가 발생했는지 확인하는 방법이 없습니까? – geekman

+0

내 대답을 편집하여 보았습니다. – artragis