it-swarm-ko.tech

Wpdb를 사용하여 별도의 데이터베이스에 연결

wpdb을 다른 데이터베이스에 연결하려고합니다. 어떻게 인스턴스를 생성하고 데이터베이스 이름/사용자 이름/암호를 전달합니까?

감사

80
Wadih M.

가능합니다.

Wpdb 개체는 모든 데이터베이스에 액세스하고 테이블을 쿼리하는 데 사용할 수 있습니다. 절대 Wordpress와 관련된 필요가 없습니다. 이것은 매우 흥미 롭습니다.

이점은 get_results 등과 같은 모든 wpdb 클래스와 함수를 사용할 수 있으므로 휠을 다시 발명 할 필요가 없기 때문입니다.

방법은 다음과 같습니다.

$mydb = new wpdb('username','password','database','localhost');
$rows = $mydb->get_results("select Name from my_table");
echo "<ul>";
foreach ($rows as $obj) :
   echo "<li>".$obj->Name."</li>";
endforeach;
echo "</ul>";
133
Wadih M.

두 번째 데이터베이스에 연결하는 것은 WordPress에서 쉽습니다. WPDB 클래스의 새 인스턴스를 만들고 사용하는 표준 $ wpdb 인스턴스를 사용하는 것과 같은 방식으로 사용하면됩니다.

두 번째 데이터베이스가 메인 WP과 동일한 로그인 정보를 가지고 있다고 가정하면 wp-config.php의 미리 정의 된 상수를 사용하여 로그인 정보를 하드 코딩하지 않아도됩니다.

/**
 * Instantiate the wpdb class to connect to your second database, $database_name
 */
$second_db = new wpdb(DB_USER, DB_PASSWORD, $database_name, DB_Host);
/**
 * Use the new database object just like you would use $wpdb
 */
$results = $second_db->get_results($your_query);
29
jerclarke

아무도 이것을 말하지 않았으므로 나는 더 쉬운 방법을 추가 할 것이라고 생각했다.

당신의 추가 데이타베이스가 동일한 사용자를 가지고있는 한/당신의 워드 프레스 데이타베이스로서 그것을 액세스하기위한 세부 사항을 전달하면 아래와 같이 테이블 이름 앞에 데이타베이스 이름을 사용할 수 있습니다

$query = $wpdb->prepare('SELECT * FROM dbname.dbtable WHERE 1');
$result = $wpdb->get_results($query);
21
CommentLuv

나는 아직 논평 할 수 없지만 Wadih M.의 대답을 확대하고 싶다.

WP의 데이터베이스 클래스는 Justin Vincent의 ezSQL을 사용자 정의한 버전입니다. 인터페이스가 마음에 들면서 WordPress 기반이 아닌 사이트를 만들고 싶다면 다음을 확인하십시오. http://justinvincent.com/ezsql

7
gabrielk

이것들이 작동하는 동안 get_post_custom 및 wordpress 쿼리와 같은 "기타"사용자 지정 기능을 사용할 수있는 기능이 손실됩니다. 간단한 해결책은

$wpdb->select('database_name');

데이터베이스 전체를 변경합니다 (mysql select_db). 간단한 쿼리를 만들고 싶다면 database.table 메서드가 작동하지만 다른 워드 프레스 블로그에 액세스하려면 select를 사용할 수 있습니다. 완료하거나 블로그가 이상한 일을 할 때 다시 변경하면됩니다.

6
user4533

저는 $wpdb를 사용하여 두 개의 블로그를 업데이트해야하는 상위 사이트의 두 번째 블로그 데이터베이스에 연결하는 데 어려움을 겪고있었습니다. 두 번째 데이터베이스를 선택하기 위해 $wpdb->select($dbname, $dbh)을 사용했지만 첫 번째 데이터베이스에서 여전히 결과를 얻고있었습니다.

두 번째 데이터베이스에서 WP 함수를 호출하기 전에 WordPress 캐시를 지우려면 wp_cache_flush()을 호출하여 문제를 해결했습니다.

4
Matt