본문 바로가기
Etc/Wordpress

[Wordpress] 데이터베이스

by 생각하는달팽이 2015. 3. 7.

워드프레스 데이터베이스 클래스

워드프레스에는 디비를 직접 다룰 수 있는 메소드 함수를 가진 객체 클래스가 있다. 이 디비 클래스를 wpdb 라고 부르며 , 해당 클래스는 wp-includes/wp-db.php 내에 있다. wpdb 클래스를 사용하려면 반드시 $wpdb를 전역변수로 정의해 둔 다음, 호출해야 한다.

호출 방식은 다음과 같다.


global $wpdb;


wpdb 클래스의 함수 중 가장 중요한 것이 prepare 함수이다. 이는 웹사이트에 대한 SQL 인젝션 공격을 예방하는 데 꼭 필요하다.

( prepare 함수를 통해 쿼리의 변수에 escape 문자열을 추가한다. 

다음 예제를 살펴보자.


<?php

$field_key = "address";

$field_value = "123 Elm St";

$wpdb->query( $wpdb->prepare("INSERT INTO $wpdb->my_custom_table ( id, field_key, field_value ) VALUES ( %d, %s, %s )",1,$field_key,$field_value));

?>


prepare 사용시 쿼리에 사용되는 변수를 모두 %s, %d 로 대체해야한다.


복합 데이터베이스 작업

전체 테이블 열을 검색하려면 get_row 함수를 이용해야 한다. get_row 함수는 데이터를 반환할 때 객체나 연관배열, 수치색인배열등이 가능하다.

다음과 같이 사용한다.


<?php

$thepost = $wpdb->get_row( $wpdb->prepare("SELECT * FROM $wpdb->posts WHERE ID = 1" ),ARRAY_A);

print_r($thepost);

?>


여기서 ARRAY_A 매개변수를 사용함으로써 포스트 데이터가 연관배열로 반환된다. 만일 ARRAY_N 을 사용하면 수치색인배열로 반환된다. 만일, 데이터베이스에서 다중열을 가져올때 get_results 함수를 사용해야한다. 이때, 해당 함수가 리턴하는 형식은 배열이다.


데이터 추가

워드프레스 데이터베이스 클래스에는 INSERT 전용함수가 존재한다. 다음의 예를 통해 알아보자.


$wpdb->insert( $table, $data );


<?php

$newvalueOne = 'Hello World';

$newvalueTwo = 'This is my data';

$wpdb->insert($wpdb->my_custom_table,array( 'field_one' = > $newvalueOne, 'field_tow' => $newvalueTwo ) );

?>

다음과 같이 배열안에 어떤 값을 어떻게 넣을지 셋팅을 해준다.


데이터 수정

워드프레스 데이터베이스 클래스에는 UPDATE 전용함수도 존재한다. 다음의 예를 통해 알아보자.


$wpdb->update( $table, $data, $where);


<?php

$newtitle = 'My updated post title';

$newcontent = 'My new content';

$my_id = 1;

$wpdb->update($wpdb->posts,array('post_title' => $newtitle, 'post_content' => $newcontent),array('ID'=>$my_id));

?>


에러 처리

쿼리를 처리할 때 어떤 에러가 발생했는지 확인하는 것은 매우 중요하다. 다음은 SQL 문의 에러를 확인하는 예제이다.

<?php

$wpdb->show_errors();

$liveposts = $wpdb->get_results( $wpdb->prepare("SELECT ID, post_title FROM $wpdb->posts_FAKE WHERE post_status = 'publish'"));

$wpdb->print_error();

?>


쿼리 실행전에 show_errors(); 를 호출해주고 쿼리 실행 후에 print_error(); 를 호출한다.

만일, 에러를 표시 안하려면 hide_errors(); 를 해주면 된다. 캐시된 쿼리 결과를 삭제 할경우에는 $wpdb->flush() 함수를 호출한다.


위를 통해 우리는 워드프레스의 데이터베이스를 직접 조작할 수 있다.


워드프레스에 대한 기초 설명은 여기까지 하도록 하겠습니다.  추가적인 질문은 댓글달아주세요 

(_ _)


반응형

'Etc > Wordpress' 카테고리의 다른 글

[Wordpress] 루프  (0) 2015.03.05
[Wordpress] 코어 분석  (0) 2015.03.05
[Wordpress] wp-config 파일  (0) 2015.03.02