PHP에서 PDO (PHP Data Objects)는 데이터베이스에 액세스하기위한 가볍고 초록 데이터베이스 액세스 계층입니다. PDO는 트랜잭션 처리를 지원하는 기능을 포함하여 여러 데이터베이스 관리 시스템에 액세스 할 수있는 일관된 API를 제공합니다. 트랜잭션은 모든 성공 또는 모든 실패의 일련의 운영을 참조하여 데이터의 일관성과 무결성을 보장합니다.
PDO :: intransaction () 은 현재 데이터베이스 연결이 트랜잭션에 있는지 확인하는 PDO 클래스의 메소드입니다. 거래에 대한 상태 정보를 제공하지만 거래의 시작 및 종료 시간을 직접 제어하지는 않습니다. 이 기사는 PDO :: intransaction () 의 역할에 대해 자세히 설명하고 트랜잭션 관리에 PDO를 올바르게 사용하는 방법을 소개합니다.
pdo :: intransaction () 메소드는 현재 데이터베이스 연결이 트랜잭션을 진행하고 있는지 여부를 나타내는 부울 값을 반환합니다. 구체적으로, intransaction ()은 트랜잭션이 시작되었지만 커밋되거나 롤백 되지 않은 경우 true를 반환합니다.
사용 예 :
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$pdo</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">PDO</span></span><span>(</span><span><span class="hljs-string">'mysql:host=localhost;dbname=testdb'</span></span><span>, </span><span><span class="hljs-string">'root'</span></span><span>, </span><span><span class="hljs-string">''</span></span><span>);
</span><span><span class="hljs-comment">// 거래 중인지 확인하십시오</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$pdo</span></span><span>-></span><span><span class="hljs-title function_ invoke__">inTransaction</span></span><span>()) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"거래가 진행 중입니다"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"현재 거래가 진행 중입니다"</span></span><span>;
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
이 예에서는 현재 트랜잭션이 진행 중이없는 경우 출력은 "현재 트랜잭션이 진행 중이 아닙니다"가됩니다. 거래가 시작되면 출력은 "진행중인 거래"가됩니다.
intransaction ()은 트랜잭션이 활성화되었는지 여부 만 알려주는 것이지만 트랜잭션을 시작하거나 종료하지는 않습니다. 상태 쿼리 방법입니다.
트랜잭션의 시작과 끝은 begintransaction () , commit () 및 rollback () 메소드에 의해 제어됩니다.
begintransaction () : 새 트랜잭션을 시작합니다.
Commit () : 현재 거래를 커밋하십시오.
롤백 () : 롤백 현재 트랜잭션.
거래 사용의 예 :
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$pdo</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">PDO</span></span><span>(</span><span><span class="hljs-string">'mysql:host=localhost;dbname=testdb'</span></span><span>, </span><span><span class="hljs-string">'root'</span></span><span>, </span><span><span class="hljs-string">''</span></span><span>);
</span><span><span class="hljs-comment">// 거래를 시작하십시오</span></span><span>
</span><span><span class="hljs-variable">$pdo</span></span><span>-></span><span><span class="hljs-title function_ invoke__">beginTransaction</span></span><span>();
</span><span><span class="hljs-keyword">try</span></span><span> {
</span><span><span class="hljs-comment">// 데이터베이스 작업을 수행합니다</span></span><span>
</span><span><span class="hljs-variable">$pdo</span></span><span>-></span><span><span class="hljs-title function_ invoke__">exec</span></span><span>(</span><span><span class="hljs-string">"INSERT INTO users (name, email) VALUES ('John Doe', 'john@example.com')"</span></span><span>);
</span><span><span class="hljs-comment">// 모든 것이 잘되면,거래를 제출하십시오</span></span><span>
</span><span><span class="hljs-variable">$pdo</span></span><span>-></span><span><span class="hljs-title function_ invoke__">commit</span></span><span>();
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"거래 제출 성공"</span></span><span>;
} </span><span><span class="hljs-keyword">catch</span></span><span> (</span><span><span class="hljs-built_in">Exception</span></span><span> </span><span><span class="hljs-variable">$e</span></span><span>) {
</span><span><span class="hljs-comment">// 오류가 발생하면 트랜잭션을 롤백하십시오</span></span><span>
</span><span><span class="hljs-variable">$pdo</span></span><span>-></span><span><span class="hljs-title function_ invoke__">rollBack</span></span><span>();
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"거래 롤백,오류 메시지: "</span></span><span> . </span><span><span class="hljs-variable">$e</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>();
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
이 예에서는 begintransaction () 이 트랜잭션을 시작합니다. 실행 중에 오류가 발생하지 않으면 트랜잭션은 Commit ()를 통해 제출되며 모든 데이터베이스 작업이 최종적으로 저장됩니다. 트랜잭션에서 예외가 발생하면 롤백 ()을 통해 트랜잭션을 롤백하여 데이터베이스가 일관성을 유지하는지 확인하십시오.
PDO :: intransaction ()은 거래 상태를 감지하는 데 도움이 될 수 있지만 일반적으로 거래 상태의 디버깅 또는 조건부 판단에 사용됩니다. 예를 들어, 거래가 시작되었는지 확인하여 거래를 시작하지 않고 커밋 또는 롤백 운영을 피하십시오.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$pdo</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">PDO</span></span><span>(</span><span><span class="hljs-string">'mysql:host=localhost;dbname=testdb'</span></span><span>, </span><span><span class="hljs-string">'root'</span></span><span>, </span><span><span class="hljs-string">''</span></span><span>);
</span><span><span class="hljs-comment">// 거래를 시작하십시오</span></span><span>
</span><span><span class="hljs-variable">$pdo</span></span><span>-></span><span><span class="hljs-title function_ invoke__">beginTransaction</span></span><span>();
</span><span><span class="hljs-keyword">try</span></span><span> {
</span><span><span class="hljs-comment">// 데이터베이스 작업을 수행합니다</span></span><span>
</span><span><span class="hljs-variable">$pdo</span></span><span>-></span><span><span class="hljs-title function_ invoke__">exec</span></span><span>(</span><span><span class="hljs-string">"INSERT INTO users (name, email) VALUES ('Jane Doe', 'jane@example.com')"</span></span><span>);
</span><span><span class="hljs-comment">// 거래가 시작되었는지 확인하십시오,반복적 인 제출을 피하십시오</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$pdo</span></span><span>-></span><span><span class="hljs-title function_ invoke__">inTransaction</span></span><span>()) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"거래가 제출되었습니다,다시 제출할 수 없습니다"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-comment">// 거래를 제출하십시오</span></span><span>
</span><span><span class="hljs-variable">$pdo</span></span><span>-></span><span><span class="hljs-title function_ invoke__">commit</span></span><span>();
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"거래 제출 성공"</span></span><span>;
}
} </span><span><span class="hljs-keyword">catch</span></span><span> (</span><span><span class="hljs-built_in">Exception</span></span><span> </span><span><span class="hljs-variable">$e</span></span><span>) {
</span><span><span class="hljs-comment">// 오류가 발생하면 트랜잭션을 롤백하십시오</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$pdo</span></span><span>-></span><span><span class="hljs-title function_ invoke__">inTransaction</span></span><span>()) {
</span><span><span class="hljs-variable">$pdo</span></span><span>-></span><span><span class="hljs-title function_ invoke__">rollBack</span></span><span>();
}
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"거래 롤백,오류 메시지: "</span></span><span> . </span><span><span class="hljs-variable">$e</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>();
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
이 예에서는 intransaction () 이 트랜잭션이 시작되었는지 확인하고 거래가 커밋 된 경우 다시 커밋되지 않도록하는 데 사용됩니다.
PDO :: intransaction ()은 트랜잭션이 진행 중이며 거래의 시작과 끝을 제어하지 않는지에 대한 정보 만 제공합니다. 거래를 시작하거나 커밋 할 수는 없으며 거래 상태 만 알려줄 수 있습니다.
트랜잭션은 개발자가 제어하는 프로세스이므로 intransaction ()는 트랜잭션을 제대로 관리 할 수 있도록 보조 도구로만 사용됩니다. 트랜잭션 제어 방법 (예 : begintransaction () , commit () 및 rollback () )을 대체 할 수 없습니다.
PDO :: intransaction ()은 거래 관리에서 도우미 역할을합니다. 트랜잭션의 현재 상태를 확인하는 데 사용될 수 있지만 거래의 시작 또는 끝을 직접 제어하지는 않습니다. 실제 개발에서는 Transaction의 수명주기를 관리하기 위해 BeginTransaction () , Commit () 및 Rollback () 에 의존해야합니다. PDO :: intransaction ()은 거래 운영의 정확성을 보장하고 거래없이 운영을 잘못 커밋하거나 롤백하지 않도록 도와줍니다.
PDO가 제공 한 트랜잭션 방법 및 상태 검사를 올바르게 사용하면 데이터베이스 작업의 보안, 데이터 일관성 및 잠재적 오류를 피할 수 있습니다.
관련 태그:
PDO