wpdb
別のデータベースに接続したい。インスタンスを作成してデータベース名/ユーザー名/パスワードを渡すにはどうすればよいですか?
ありがとう
wpdb
別のデータベースに接続したい。インスタンスを作成してデータベース名/ユーザー名/パスワードを渡すにはどうすればよいですか?
ありがとう
回答:
はい、可能です。
wpdbオブジェクトを使用して、任意のデータベースにアクセスし、任意のテーブルを照会できます。Wordpressに関連する必要はまったくありません。これは非常に興味深いことです。
利点は、wpdbクラスやなどのすべての関数を使用できるためget_results
、ホイールを再発明する必要がないことです。
方法は次のとおりです。
$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>";
global $wpdb
。:しかし、$ wpdb-> get_results方法を発射する前に、あなたはとしてWP-load.phpを含まなければならない require_once('/your/wordpress/wp-load.php');
$mydb->set_prefix('wp_');
WordPressでは2番目のデータベースへの接続は簡単です。WPDBクラスの新しいインスタンスを作成し、私たちがよく知っている標準の$ wpdbインスタンスを使用するのと同じように使用します。
2番目のデータベースのログイン情報がメイン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);
$second_db->set_prefix('wp_');
誰もこれを言っていないので、もっと簡単な方法を追加すると思いました。
追加のデータベースにアクセスするユーザー/パスの詳細がワードプレスデータベースと同じである限り、このようなテーブル名の前にデータベース名を使用できます
$query = $wpdb->prepare('SELECT * FROM dbname.dbtable WHERE 1');
$result = $wpdb->get_results($query);
SELECT
。データを挿入できません。
これらは機能しますが、get_post_customやwordpressクエリなどの「その他」のカスタム機能を使用する機能は失われます。簡単な解決策は
$wpdb->select('database_name');
データベース全体をシステム全体で変更します(mysql select_db)。database.tableメソッドは、単純なクエリを作成する場合にのみ機能しますが、別のワードプレスブログにアクセスする場合はselectを使用できます。完了したら元に戻す必要があります。そうしないと、ブログが奇妙なことをする可能性があります。
wp_get_post_terms()
、新しく選択されたDBを使用していないようです?? 私が試した他のすべての機能(のようなget_post_meta()
、get_posts()
など)がうまく動作するようですが、wp_get_post_terms()
に向けて努力するようですDB_NAME
データベース。何か案は?
まだコメントできませんが、Wadih M.の答えを拡張したかったです(これは素晴らしいことです)。
WPのデータベースクラスは、Justin VincentのezSQLのカスタマイズバージョンです。インターフェイスが気に入っていて、WordPressベースではないサイトをやりたい場合は、http://justinvincent.com/ezsqlをご覧ください。