PDO를 사용하여 레코드 (mysql 및 PHP)를 삽입하고 있습니다.
$stmt->bindParam(':field1', $field1, PDO::PARAM_STR);
$stmt->bindParam(':field2', $field2, PDO::PARAM_STR);
$stmt->execute();
레코드가 중복되어 삽입되지 않은 경우와 같이 성공적으로 삽입되었는지 알 수있는 방법이 있습니까?
편집 : 물론 데이터베이스를 볼 수 있지만 프로그래밍 방식의 피드백을 의미합니다.
답변
PDOStatement->execute()
성공하면 true를 반환합니다. PDOStatement->errorCode()
오류를 확인할 수도 있습니다.
답변
PDO에 가장 권장되는 오류 모드가 ERRMODE_EXCEPTION
이므로 직접 execute()
결과 확인이 작동 하지 않습니다 . 코드 실행이 다른 답변에서 제공되는 조건에 도달하지 않기 때문에.
따라서 PDO에서 쿼리 실행 결과를 처리 할 수있는 세 가지 시나리오가 있습니다.
- 성공을 알리기 위해 확인이 필요하지 않습니다. 프로그램 흐름을 유지하십시오.
- 예기치 않은 오류를 처리하려면 동일하게 유지하십시오. 즉각적인 처리 코드가 필요하지 않습니다. 데이터베이스 오류의 경우 예외가 발생하고 사이트 전체의 오류 처리기로 버블 링되어 결국 일반적인 500 오류 페이지가 발생합니다.
- 중복 기본 키와 같은 예상 오류를 처리하려면이 특정 오류를 처리 할 특정 시나리오가있는 경우
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!";
위의 코드에서 우리는 어떤 조치를 취하기 위해 특정 오류를 확인하고 프로그래머에게보고 될 다른 오류 (예 : 테이블 없음)에 대한 예외를 다시 발생시킵니다.
다시 말하지만, 사용자에게 “당신의 삽입이 성공했습니다”와 같은 것을 알리기 위해 어떠한 조건도 필요하지 않습니다.
답변
의 반환 값을보고 시도 execute
하고, TRUE
성공 및 FALSE
실패.
답변
업데이트 쿼리가 현재 데이터베이스 레코드와 일치하는 값으로 실행되면 영향을받은 행이없는 $stmt->rowCount()
경우 반환 0
됩니다. if( rowCount() == 1 )
성공 여부를 테스트 해야하는 경우 업데이트가 실패하지 않았지만 값이 이미 데이터베이스에 있으므로 변경되지 않았을 때 실패했다고 생각할 것입니다.
$stmt->execute();
if( $stmt ) return "success";
위반 된 고유 키 필드로 레코드를 업데이트하려고 할 때이 기능이 작동하지 않았습니다. 쿼리는 성공을 반환했지만 다른 쿼리는 이전 필드 값을 반환합니다.
답변
행 개수를 테스트 할 수 있습니다.
$sqlStatement->execute( ...);
if ($sqlStatement->rowCount() > 0)
{
return true;
}
답변
자동 증가와 함께 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)
}