답변:
PDOStatement->execute()
성공하면 true를 반환합니다. PDOStatement->errorCode()
오류를 확인할 수도 있습니다.
if ($stmt->execute()) { //true }
PDOStatement->execute()
와 PDOStatement->errorCode()
서로 완전히 일치? PDOStatement->errorCode()
뭔가가 있지만 PDOStatement->execute()
사실을 반환 하는 상황 이 있습니까? 아니면 PDOStatement->execute()
거짓을 반환하지만 PDOStatement->errorCode()
아무것도 없을 때 ?
PDO에 가장 권장되는 오류 모드가 ERRMODE_EXCEPTION
이므로 직접 execute()
결과 확인이 작동 하지 않습니다 . 코드 실행이 다른 답변에서 제공되는 조건에 도달하지 않기 때문에.
따라서 PDO에서 쿼리 실행 결과를 처리 할 수있는 세 가지 시나리오가 있습니다.
try..catch
연산자 를 사용하십시오 .일반 PHP 사용자의 경우 약간 낯설게 들립니다. 작업의 직접적인 결과를 확인하지 않는 것이 어떻습니까? -그러나 이것이 예외가 작동하는 방식입니다. 다른 곳에서 오류를 확인합니다. 한 번에 모든. 매우 편리합니다.
따라서 간단히 말해서 일반 코드에서는 오류 처리가 전혀 필요하지 않습니다. 코드를 그대로 유지하십시오.
$stmt->bindParam(':field1', $field1, PDO::PARAM_STR);
$stmt->bindParam(':field2', $field2, PDO::PARAM_STR);
$stmt->execute();
echo "Success!"; // whatever
성공하면 그렇게 알려주고, 오류가 발생하면 애플리케이션이 그러한 경우에 표시하는 일반 오류 페이지를 보여줍니다.
오류를보고하는 것 이외 의 처리 시나리오가있는 경우에만try..catch
연산자에 삽입 문을 넣고 예상 한 오류인지 확인하고 처리하십시오. 또는-오류가 다른 경우- 예외를 다시 발생시켜 사이트 전체 오류 처리기가 일반적인 방식으로 처리 할 수 있도록합니다. 다음은 PDO를 사용한 오류 처리에 대한 내 기사 의 예제 코드입니다 .
try {
$pdo->prepare("INSERT INTO users VALUES (NULL,?,?,?,?)")->execute($data);
} catch (PDOException $e) {
if ($e->getCode() == 1062) {
// Take some action if there is a key constraint violation, i.e. duplicate name
} else {
throw $e;
}
}
echo "Success!";
위의 코드에서 우리는 어떤 조치를 취하기 위해 특정 오류를 확인하고 프로그래머에게보고 될 다른 오류 (예 : 테이블 없음)에 대한 예외를 다시 발생시킵니다.
다시 말하지만, 사용자에게 "당신의 삽입이 성공했습니다"와 같은 것을 알리기 위해 어떠한 조건도 필요하지 않습니다.
query()
기능 에 대해 말씀해 주 시겠습니까? query()
대신 try-catch를 사용할 수 있습니까 prepared()->execute()
?
업데이트 쿼리가 현재 데이터베이스 레코드와 일치하는 값으로 실행되면 영향을받은 행이없는 $stmt->rowCount()
경우 반환 0
됩니다. if( rowCount() == 1 )
성공 여부를 테스트 해야하는 경우 업데이트가 실패하지 않았지만 값이 이미 데이터베이스에 있으므로 변경되지 않았을 때 실패했다고 생각할 것입니다.
$stmt->execute();
if( $stmt ) return "success";
위반 된 고유 키 필드로 레코드를 업데이트하려고 할 때이 기능이 작동하지 않았습니다. 쿼리는 성공을 반환했지만 다른 쿼리는 이전 필드 값을 반환합니다.
if($stmt->execute() && ($stmt->rowCount()>0))
행 개수를 테스트 할 수 있습니다.
$sqlStatement->execute( ...);
if ($sqlStatement->rowCount() > 0)
{
return true;
}
SELECT
쿼리 에 대해 신뢰할 수 없다고 말합니다 (그리고 거기에서도 문서는 여러 쿼리 에 대해 이야기 합니다). 작동하기에 괜찮아 보이는 DELETE
, INSERT
또는 에 대한 내용이 없습니다 UPDATE
(질문에 대한 질문이었습니다 INSERT
). 그러나 나는 PDO를 처음 접했고 내가 틀렸고 누군가 다른 참조가 있다면 여기에 적어주세요. 위의 세 가지 명령에 대해 실제 단점이 있는지 확인하고 싶습니다.
자동 증가와 함께 ID를 기본 키로 사용
$stmt->execute();
$insertid = $conn->lastInsertId();
증분 id는 첫 번째 레코드에서도 항상 0보다 크므로 항상 id coz에 대한 true 값이 0보다 큰 경우 PHP에서 true를 의미합니다.
if ($insertid)
echo "record inserted successfully";
else
echo "record insertion failed";
PDOStatement-> execute ()는 예외를 발생시킬 수 있습니다.
그래서 당신이 할 수있는 것은
try
{
PDOStatement->execute();
//record inserted
}
catch(Exception $e)
{
//Some error occured. (i.e. violation of constraints)
}