ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [CodeIgniter] 데이터베이스(Database) 쿼리 빌더 - UPDATE
    프로그래밍/CodeIgniter 2018. 10. 31. 13:26

    ▶CodeIgniter 데이터베이스(Database) 쿼리 빌더 - UPDATE



    ▶설명


    코드이그나이터(CodeIgniter) 쿼리 빌더 8번째 정리입니다.

    이번에는 데이터를 수정할 때 사용하는 UPDATE 문과 관련된 기능을 수행하는 쿼리 빌더 함수에 대해 알아보도록 하겠습니다.


    자주 사용하는 함수만 적어뒀습니다.

    쿼리 빌더 클래스에 대한 자세한 내용은 아래의 매뉴얼을 참조하시기 바랍니다.


    예제 코드는 제가 자주 사용하는 방식으로 작성했습니다.


    ▶UPDATE 함수



    $this->db->update()

    이 함수는 UPDATE 문을 실행합니다.

    첫 번째 파라미터는 입력할 테이블명,

    두 번째 파라미터는 필드명과 값을 포함한 연관 배열 혹은 객체를 사용합니다.

    두 번째 파라미터를 넘기지 않고, $this->db->set() 함수를 이용하는 방법도 있습니다.


    이제 3가지 사용 방법에 대해 알아보겠습니다.


    첫 번째 : 연관배열

    $data = array(
        'price' => 4200
    );
    
    $where = array(
        'name' => '각도기'
    );
    
    $this->db->update('products', $data, $where);
    // ... 또는        
    // $this->db->update('products', $data, "name = '각도기'");
    // 실행 결과 : UPDATE `products` SET `price` = 4200 WHERE `name` = '각도기'


    두 번째 : 객체

    $data = new stdClass();
    $data->price = 2500;
    
    $this->db->update('products', $data, "name = '요요'");
    // 실행 결과 : UPDATE `products` SET `price` = 2500 WHERE `name` = '요요'


    세 번째 : $this->db->set() 함수

    $this->db->where() 함수를 사용해서 WHERE 절을 추가할 수 있습니다.
    $this->db
        ->set('price', 4300)
        ->where('name', '햄버거')
        ->update('products');
    // 실행 결과 : UPDATE `products` SET `price` = 4300 WHERE `name` = '햄버거'


    $this->db->update_batch()

    $this->db->update()와 동일하게 UPDATE 문을 실행하지만,

    한 번에 여러 개의 데이터를 변경할 때 사용하는 함수입니다.

    첫 번째 파라미터는 입력할 테이블명,

    두 번째 파라미터는 필드명과 값을 포함한 연관 배열 혹은 객체를 사용합니다.

    세 번째 파라미터는 WHERE 키입니다.


    예제

    $data = array(
        array(
            'name' => '주사위',
            'price' => 800,
            'group' => '장난감'
        ),
        array(
            'name' => '큐브',
            'price' => 3200,
            'group' => '장난감'
        )
    );
    
    $this->db->update_batch('products', $data, 'name');


    실행 결과

    UPDATE
        `products` 
    SET
        `price` =
            CASE
                WHEN `name` = '주사위' THEN 800
                WHEN `name` = '큐브' THEN 3200
                ELSE `price`
            END,
        `group` =
            CASE
                WHEN `name` = '주사위' THEN '장난감'
                WHEN `name` = '큐브' THEN '장난감'
                ELSE `group`
            END
    WHERE 
        `name` IN('주사위','큐브')


    ▶REPLACE 함수


    REPLACE 문은  DELETE + INSERT을 실행합니다.

    그렇기 때문에 AUTO_INCREMENT 값이 변경됩니다.


    REPLACE에 대한 자세한 내용은 [MySQL 중복 키 관리 방법]을 확인하시기 바랍니다.


    $this->db->replace()

    이 함수는 REPLACE 문을 실행합니다.

    첫 번째 파라미터는 입력할 테이블명,

    두 번째 파라미터는 필드명과 값을 포함한 연관 배열 혹은 객체를 사용합니다.

    두 번째 파라미터를 넘기지 않고, $this->db->set() 함수를 이용하는 방법도 있습니다.


    이제 3가지 사용 방법에 대해 알아보겠습니다.


    첫 번째 : 연관배열

    $data = array(
        'name' => '각도기',
        'price' => 4000,
        'group' => '문방구'
    );
    
    $this->db->replace('products', $data);
    // 실행 결과 : REPLACE INTO `products` (`name`, `price`, `group`) VALUES ('각도기', 4000, '문방구')


    두 번째 : 객체

    $data = new stdClass();
    $data->name = '요요';
    $data->price = 3000;
    $data->group = '장난감';
    
    $this->db->replace('products', $data);
    // 실행 결과 : REPLACE INTO `products` (`name`, `price`, `group`) VALUES ('요요', 3000, '장난감')


    세 번째 : $this->db->set() 함수

    $this->db
        ->set('name', '햄버거')
        ->set('price', 4200)
        ->set('group', '식품')
        ->replace('products');
    // 실행 결과 : REPLACE INTO `products` (`name`, `price`, `group`) VALUES ('햄버거', 4200, '식품')

    ▶마치며


    UPDATE 문과 관련된 기능을 수행 할 수 있는 쿼리 빌더를 정리했습니다.

    쿼리 빌더에 대한 내용이 많기 때문에 다음 글에 추가로 작성하겠습니다.


    댓글

Designed by Tistory.