RSS

태그 보관물: wpdb

워드프레스 DB 쿼리 사용법 총정리

데이터베이스에서 원하는 데이터를 다루기 위해서 쿼리를 사용한다. $wpdb에서 이를 지원하는 다양한 메소드를 제공한다. 주로 데이터의 조회(Select), 등록(Insert), 갱신(Update), 삭제(Delete) 작업이 그것이다. 메소드 사용법을 알아보자.

[$wpdb DB 메소드]

  • 단일 행, 단일 열의 값을 가져올 때 : get_var()
  • 단일 행, 다중 열의 값을 가져올 때 : get_row()
  • 다중 행, 다중 열의 값을 가져올 때 : get_results()
  • 데이터의 등록 : insert()
  • 데이터의 갱신 : update()
  • 데이터의 등록/갱신/삭제 : query()

 

1. 단일 행, 단일 열의 값을 가져올 때 : get_var()

  • 반환되는 레코드의 카운트나 합계 등 단일 값을 가져올 때 사용한다.
<?php
$user_count = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->users" );
echo "<p>User count is {$user_count}</p>";
?>

2. 단일 행, 다중 열의 값을 가져올 때 : get_row()

  • 하나의 레코드만 반환되는 경우 사용하며, 세 가지 형태로 결과값을 이용할 수 있다.

(1) 오브젝트 필드명으로 가져오기

$mylink = $wpdb->get_row("SELECT * FROM $wpdb->links WHERE link_id = 10");

echo $mylink->link_id; // prints "10"

(2) 연관 배열로 가져오기(필드명)

$mylink = $wpdb->get_row("SELECT * FROM $wpdb->links WHERE link_id = 10", ARRAY_A);

echo $mylink['link_id']; // prints "10"

(3) 수치 배열로 가져오기(인덱스 번호)

$mylink = $wpdb->get_row("SELECT * FROM $wpdb->links WHERE link_id = 10", ARRAY_N);

echo $mylink[1]; // prints "10"

3. 다중 행, 다중 열의 값을 가져올 때 : get_results()

  • 일반적으로 가장 많이 사용될 쿼리이다. 다중 행과 다중 열을 루프를 이용해 가져와서 사용한다.
$fivesdrafts = $wpdb->get_results( 
	"
	SELECT ID, post_title 
	FROM $wpdb->posts
	WHERE post_status = 'draft' 
		AND post_author = 5
	"
);

foreach ( $fivesdrafts as $fivesdraft ) 
{
	echo $fivesdraft->post_title;
}

4. 데이터의 등록 : insert()

  • insert 문을 직접 작성하지 않고 테이블명, 칼럼 변수/값을 직접 지정한다. 내부적으로 prepare 함수를 호출한다.
$wpdb->insert( 
	'table', 
	array( 
		'column1' => 'value1', 
		'column2' => 123 
	), 
	array( 
		'%s', 
		'%d' 
	) 
);

5. 데이터의 갱신 : update()

  • update 문을 직접 작성하지 않고 테이블명, 칼럼 변수/값을 직접 지정한다. 내부적으로 prepare 함수를 호출한다.
$wpdb->update( 
	'table', 
	array( 
		'column1' => 'value1',	// string
		'column2' => 'value2'	// integer (number) 
	), 
	array( 'ID' => 1 ), 
	array( 
		'%s',	// value1
		'%d'	// value2
	), 
	array( '%d' ) 
);

6. 데이터의 등록/갱신/삭제 : query()

  • 모든 실행쿼리를 실행할 수 있다. 주로 Insert, Update, Delete에 사용된다.
$metakey	= "Harriet's Adages";
$metavalue	= "WordPress' database interface is like Sunday Morning: Easy.";

$wpdb->query( $wpdb->prepare( 
	"
		INSERT INTO $wpdb->postmeta
		( post_id, meta_key, meta_value )
		VALUES ( %d, %s, %s )
	", 
        10, 
	$metakey, 
	$metavalue 
) );

 

 

Advertisements
 
 

태그: , ,

워드프레스 데이터베이스 들여다보기.

프로젝트나 새로운 업무를 맡게 되면 업무 분석이 필수적이다. 쉬운 방법으로 소스 디버깅을  선택할 수 있지만, 이 보다는  데이터베이스를 분석하는 게 훨씬 효과적이다. 해당 DB를 이해하지 못한 상황에서 복잡한 비즈니스 로직으로 가득 찬 소스를 디버깅한다는 건 미로 속을 헤매는 것과 별반 다르지 않다.

워드프레스는 간단한 데이터베이스 테이블의 구조와 관계를 가지고 있다. 테이블 명만 봐도 대충 용도를 파악할 수 있을 정도로 테이블 간의 관계가 명료하다. 또한, 테이블마다 기본키(primary key)를 구성하는 친절함도 빼먹지 않았다.

WP3.0-ERD

[워드프레스 ERD]

주요 테이블을 상세히 들여다보자.

  • wp_comments 워드프레스의 모든 댓글을 저장한다. 각 댓글은 post ID를 통해 포스트와 연결된다.
  • wp_commentsmeta 댓글의 모든 메타테이터를 저장한다.
  • wp_links 링크 관리자 기능에서 추가한 모든 링크를 저장한다.
  • wp_options 설정 메뉴에서 저장한 모든 웹사이트 옵션값을 저장한다. 또한, 플러그인 옵션과 지금 쓰고 있는 테마와 플러그인, 기타 정보를 저장한다.,
  • wp_postmeta 포스트의 모든 메타데이터를 저장한다.
  • wp_posts 모든 포스트와 페이지, 미디어 레코드와 수정본을 저장한다. 대부분의 경우 워드프레스 테이블 중에서 가장 크다.
  • wp_terms 웹사이트에서 정의된 모든 택소노미 용어를 저장한다.
  • wp_term_relationships 포스트와 링크 등의 콘텐츠와 텍소노미 용어를 결합한다.
  • wp_term_taxonomy 각 용어에 할당된 택소노미를 정의한다.
  • wp_users 웹사이트에 생성된 모든 사용자 정보를 저장한다. (계정, 비밀번호, 이메일)
  • wp_usermeta 사용자의 메타데이터를 저장한다. (이름, 별명, 등급)

워드프레스에서 이 데이터베이스를 다루기 위한 클래스가 정의되어 있다. wpdb 클래스이고 wp-includes/wp-db.php에 있다. PHP코드에서 워드프레스 데이터베이스를 쿼리 한다는 것은 wpdb 클래스를 사용한다는 뜻이다.

 
 

태그: , ,