3
하나의 PDO 트랜잭션 내에 4 개의 테이블을 생성하려고합니다.하나의 트랜잭션 내에서 오류가있는 여러 CREATE TABLE - PDO 예외 없음
명령문의 첫 번째 "CREATE TABLE ..."부분에 오류가 있으면 성공적으로 예외, 오류 메시지 및 롤백을 얻습니다. 그러나 첫 번째 "CREATE TABLE ..."부분이 제대로 작성된 경우 (예 : 아래 예와 같이) 예외가 발생하지 않으며 커밋되어 첫 번째 표만 생성됩니다.
$conn = Connection::getInstance();
$conn->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$conn->dbh->beginTransaction();
$stmt = $conn->dbh->prepare("
CREATE TABLE IF NOT EXISTS `1st table` (valid SQL-code)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;
CREATE TABLE IF NOT EXISTS `2nd table` (SQL-code with an error)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;
CREATE TABLE IF NOT EXISTS `3rd table`...
CREATE TABLE IF NOT EXISTS `4th table`...
");
try
{
$stmt->execute();
$conn->dbh->commit();
}
catch (Exception $e)
{
$conn->dbh->rollBack();
echo $e->getMessage();
}
unset($stmt);
나는 다음과 같은 note php.net에서 발견 된 일부 연구 후 : 여기
코드의 MySQL을 포함일부 데이터베이스는 자동으로 발급 암시 적 COMMIT 때 데이터베이스 정의 언어 (DDL) 문은 DROP TABLE 또는 CREATE TABLE과 같이 트랜잭션 내에서 실행됩니다.
문제의 원인과 해결 방법은 무엇입니까?
문을 연속적으로 개별적으로 실행하지 않는 이유가 있습니까? 나는 한 번의 호출로 여러 문장을 실행하는 것을 본 적이 없다. –
단일 트랜잭션에서 모든 테이블을 생성하려고합니다. SQL 코드에 오류가 있으면 아무 것도 만들지 않기를 바란다. – Placido
한 번의 호출로 여러 개의 PDO 문을 실행할 수 있습니다. SQL 코드에 오류가 없으면 네 개의 테이블이 모두 성공적으로 작성됩니다. – Placido