programing

$this->db->affected_rows()는 왜0을 반환합니까?

newsource 2023. 1. 20. 16:11

$this->db->affected_rows()는 왜0을 반환합니까?

코드 시그니터 3에는 사용자를 삭제하기 위한 다음 기능이 기재되어 있습니다.

    public function deleteUser($id) {

        $this->db->trans_start();

        $this->db->where('usma_user_id', $id);
        $this->db->delete('ec_usma_usermain');          

        $this->db->trans_complete();            

        if ($this->db->trans_status() === FALSE) {

            $transResult = array(
                            'response' => 'Operation failed!',
                            'status' => TRUE
                            );

        } else if ($this->db->trans_status() === TRUE) {

            if($this->db->affected_rows() > 0 ) {

                $transResult = array(
                                'response' => 'Operation executed successfully!',
                                'status' => TRUE
                                );

            } else {

                $transResult = array(
                                'response' => 'Unexpected error! Contact admin.',
                                'status' => FALSE
                            );

            }
        }

        return $transResult;

    }

위의 함수에서는 행이 있고 삭제되어도 반환되는 응답은 다음과 같습니다.

예기치 않은 오류!관리자에게 문의하다

그 말은 즉, 가치의 반환되고

    echo $this->db->affected_rows();

0 입니다.그래서 나는 의 출력을 확인했다(에코

    echo $this->db->affected_rows(); 

전에

    echo $this->db->trans_complete();

실행되면 삭제된 행의 수(내 경우 1행)가 반환되며, 같은 줄의 코드가 다음에 쓰여질 경우

    echo $this->db->trans_complete();

0이 반환됩니다.그것은 왜 그럴까?

이 페이지의 메모를 확인해 주세요.https://www.codeigniter.com/userguide3/database/helpers.html

"주의: MySQL "DELETE FROM TABLE"에서 영향을 받는 행이 0개 반환됩니다.데이터베이스 클래스에는 영향을 받는 행의 정확한 수를 반환할 수 있는 작은 해킹이 있습니다.디폴트로는 이 해킹은 유효하지만 데이터베이스 드라이버 파일에서는 무효로 할 수 있습니다.

이 해킹이 유효하게 되어 있는 한(그리고 당신의 질문에서 나온 것처럼 들립니다), 회피책은 단순히 다음 파일을 저장하는 것입니다.affected_rows쿼리를 실행한 후 트랜잭션을 종료하기 전에 선택합니다.다음과 같이 됩니다.

public function deleteUser($id) {

$this->db->trans_start();

$this->db->where('usma_user_id', $id);
$this->db->delete('ec_usma_usermain');          

//store the affected_row value here
$affectedRows=$this->db->affected_rows();

$this->db->trans_complete();            

if ($this->db->trans_status() === FALSE) {

    $transResult = array(
                    'response' => 'Operation failed!',
                    'status' => TRUE
                    );

} else if ($this->db->trans_status() === TRUE) {

    //recall the stored value here
    if($affectedRows > 0 ) {

        $transResult = array(
                        'response' => 'Operation executed successfully!',
                        'status' => TRUE
                        );

    } else {

        $transResult = array(
                        'response' => 'Unexpected error! Contact admin.',
                        'status' => FALSE
                    );

    }
}

return $transResult;

}

정말로.$this->db->affected_rows()마지막 문의 영향을 받는 행 수를 반환합니다.여기 마지막 진술입니다.$this->db->trans_complete()영향을 받는 행의 수가0.

언급URL : https://stackoverflow.com/questions/53050097/why-do-this-db-affected-rows-returns-0