programing

워드프레스에서 mysql 트랜잭션을 사용하는 방법은 무엇입니까?

easyjava 2023. 3. 15. 20:02
반응형

워드프레스에서 mysql 트랜잭션을 사용하는 방법은 무엇입니까?

워드프레스에서 mysql 트랜잭션을 사용하는 방법은 무엇입니까?10명의 아이를 삭제하고 싶습니다만, 1명이 활성화 되어 있으면 전체 삭제가 롤백 됩니다.

한 번도 시도해 본 적이 없으며 특별히 평범한 것은 없지만 다음과 같은 쿼리를 실행하는 것뿐입니다(다음 시간 후에 쿼리를 실행합니다.START TRANSACTION및 사용COMMIT또는ROLLBACK(결과에 따라 다름) :

mysql_query('START TRANSACTION');
$res1 = mysql_query('query1');
$res2 = mysql_query('query2');
If ( $res1 && $res2 ) {
    mysql_query('COMMIT'); // commits all queries
} else {
    mysql_query('ROLLBACK'); // rollbacks everything
}

그래서 이런 걸 사용해서 워드프레스로 변환할 수 있어요.

$wpdb->query('START TRANSACTION');
$result1 = $wpdb->delete( $table, $where, $where_format = null );
$resul2 = $wpdb->delete( $table, $where, $where_format = null );
if($result1 && $result2) {
    $wpdb->query('COMMIT'); // if you come here then well done
}
else {
    $wpdb->query('ROLLBACK'); // // something went wrong, Rollback
}

를 사용할 수도 있습니다.try catch(WordPress가 아니라 같은 생각) 이 답변입니다.에 대한 자세한 내용을 참조해 주세요.$wpdb쿼리 함수(query그리고.delete)를 참조해 주세요.

MySQL의 기본 MyISAM 스토리지 엔진은 트랜잭션을 지원하지 않으므로 옵션이 아닙니다.트랜잭션을 사용하려면 모든 테이블이 InnoDB로 정의되어 있는지 확인하십시오.

WordPress에서 트랜잭션을 구현하는 것은 글로벌 변수를 활용하기 때문에 어렵습니다.$wpdb그 때문에, 데이타베이스에의 단일 접속을 사용하기 때문에, 그 부작용은 다음과 같습니다.

이 코드의 여러 인스턴스를 실행하는 경우:

$wpdb->query('START TRANSACTION');
$result1 = $wpdb->delete( $table, $where, $where_format = null );
$resul2 = $wpdb->delete( $table, $where, $where_format = null );
if($result1 && $result2) {
    $wpdb->query('COMMIT'); // if you come here then well done
}
else {
    $wpdb->query('ROLLBACK'); // // something went wrong, Rollback
}

그들은 충돌하고 문제를 일으킬 수 있다.하나의 연결이 있기 때문에 MySQL 연결을 사용하는 하나의 글로벌 변수가 있기 때문에 하나의 스레드에서 트랜잭션을 시작하고 동일한 트랜잭션이 다른 스레드로 전달될 수 있습니다.

그래서 저는 트랜잭션을 워드프레스 방식으로 사용하는 것이 사용하지 않는 것보다 더 위험하다고 생각합니다.최적의 솔루션은 mysqli 클래스를 사용하여 트랜잭션 쿼리를 작성할 때마다 새 연결을 만드는 것입니다.

$conn = new mysqli(WORDPRESS_DB_SERVER, WORDPRESS_DB_USER, WORDPRESS_DB_PASS, WORDPRESS_DB_NAME);
$conn->query('START TRANSACTION');
$sql = "DELETE FROM $table WHERE $where"; // ESCAPE YOUR DATA!
$result = $conn->query($sql);
$res1 = $conn->query('query1');
$res2 = $conn->query('query2');
If ( $res1 && $res2 ) {
     $conn->query('COMMIT'); // commits all queries
} else {
     $conn->query('ROLLBACK'); // rollbacks everything
}

언급URL : https://stackoverflow.com/questions/19153986/how-to-use-mysql-transaction-in-wordpress

반응형