wpdb
を他のデータベースに接続したいのですが。インスタンスを作成し、それにデータベース名/ユーザー名/パスワードを渡すにはどうすればよいですか?
ありがとう
はい、可能です。
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>";
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);
誰もこれを言っていないので、私はもっと簡単な方法を追加したいと思いました。
あなたの追加データベースがあなたのワードプレスデータベースと同じユーザー/パスの詳細を持っている限り、あなたはこのようなテーブル名の前にデータベース名を使うことができます。
$query = $wpdb->prepare('SELECT * FROM dbname.dbtable WHERE 1');
$result = $wpdb->get_results($query);
私はまだコメントできませんが、Wadih M.の答え(これは素晴らしいです)を拡張したいと思いました。
WPのデータベースクラスは、Justin VincentのezSQLをカスタマイズしたものです。あなたがインターフェースが好きで、あなたがWordPressベースではないサイトをしたいと思うなら、あなたはそれをチェックアウトしたいかもしれません: http://justinvincent.com/ezsql
これらは機能しますが、get_post_customやwordpressクエリなどの「その他の」カスタム機能を使用することはできなくなります。簡単な解決策は
$wpdb->select('database_name');
これはデータベースをシステム全体で変更します(mysql select_db)。 database.tableメソッドは、単純なクエリを作成するだけの場合は機能しますが、他のWordpressブログにアクセスする場合はselectを使用できます。作業が終わったら元に戻す必要があるでしょう。そうしないとブログが奇妙なことをするかもしれません。
2つのブログを更新する必要がある親サイトから2番目のブログデータベースに接続するのに$wpdb
を使用するのに苦労していました。 $wpdb->select($dbname, $dbh)
を使って2番目のデータベースを選択しましたが、それでも最初のデータベースから結果が得られていました。
2番目のデータベースでWP関数を呼び出す前に、wp_cache_flush()
を呼び出してWordPressキャッシュをクリアすることで問題を解決しました。