wpdbを使用して別のデータベースに接続する
-
-
別のMySQLデータベース、または別のデータベースタイプ?それでも通常のWordPressデータベースにアクセスしたいですか、それともサイトをあるDBから別のDBに移動しますか?Another MySQL database, or another database type? Do you still want access to the regular WordPress database, or are you moving the site from one DB to another?
- 0
- 2010-09-10
- EAMann
-
はい、別のMySQLデータベースです.これは同じサーバー上の別個のDBであり、WordpressのDBではありません.これはカスタムデータベースであり、WordPress内に表示したい情報が含まれています.Yes, another MySQL database. It's a separate DB on the same server, and it's not a Wordpress one. It's a custom db, with information I want to display inside wordpress.
- 1
- 2010-09-10
- Wadih M.
-
$ wpdbオブジェクトを使用してこれを行った場合、可能であれば、WordPressの残りの部分を既存のデータベースから切断します.したがって、お勧めしません.もう1つのオプションは、WordPressで使用されるEZSQLを使用して新しいインスタンスを作成することです.EZSQLが使用されているのは、特定のサーバーにインストールされている可能性があるかどうかわからない、php-pdo-mysql、php-mysql、またはphp-mysqliを使用する必要がないように抽象化するレイヤーだからです.If you did that with the $wpdb object, if it were even possible, it would disconnect the rest of WordPress from its existing database. So, not recommended. Another option is to create a new instance using EZSQL, which is used by WordPress. I think EZSQL is used because it's a layer that abstracts you from having to use php-pdo-mysql, php-mysql, or php-mysqli, not knowing which might be installed on a given server.
- 1
- 2010-09-10
- Volomike
-
はい、それは可能です.wpdbをインスタンス化して、任意のデータベースにアクセスし、任意のテーブルにクエリを実行できます.Yes it's possible. wpdb can be instantiated to access any database and query any table.
- 3
- 2010-09-10
- Wadih M.
-
6 回答
- 投票
-
- 2010-09-10
はい、可能です.
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>";
Yes it's possible.
The wpdb object can be used to access any database and query any table. Absolutely no need to be Wordpress related, which is very interesting.
The benefit is the ability to use all the wpdb classes and functions like
get_results
, etc so that there's no need to re-invent the wheel.Here's how:
$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>";
-
ブーヤ.質問自体にこれらのコメントがすべて追加されて、正確な回答が妨げられてしまうのは残念です.Booyah. Too bad all those comments added up on the question itself to block your accurate answer.
- 4
- 2010-09-11
- jerclarke
-
@ジェレミークラーク:同意します.私たちの仲間のワードプレッサーが無邪気に偽情報を広めないようにもっと注意することを願っています.@Jeremy Clarke: I agree. Hoping our fellow wordpressers will be more careful to not innocently spread out disinformation.
- 0
- 2010-09-20
- Wadih M.
-
`global $ wpdb`を使用して時間を節約することもできます.ただし、$ wpdb->get_resultsメソッドを起動する前に、wp-load.phpを次のように含める必要があります. `require_once( '/your/wordpress/wp-load.php');`you can also save time by using `global $wpdb`. But before firing $wpdb->get_results method, you must include wp-load.php as: `require_once('/your/wordpress/wp-load.php');`
- 1
- 2015-09-19
- Junior Mayhé
-
`$mydb-> set_prefix( 'wp _');`を呼び出して、WPDBプレフィックスを設定してWP_Queryとget_postを作成し、正しいSQLクエリを生成します.Set WPDB prefix to make WP_Query and get_post to generate correct sql query by calling `$mydb->set_prefix('wp_');`
- 0
- 2015-10-13
- M-R
-
これが古いスレッドであることは知っていますが、 `$mydb`変数を新しいオブジェクトで押しつぶすと、接続が開いたままになる可能性があると感じざるを得ません(間違っている可能性があります).`$mydb`が以前の呼び出しからすでにインスタンス化されているかどうかを確認し、インスタンス化されている場合は、新しいインスタンスを起動する前に接続を閉じます.例(申し訳ありませんが、コメントで適切なMarkdownコードブロックを実行することはできません): `if($mydb!=null){$mydb-> close();} `I know this is an old thread, but I can't help but feel squashing the `$mydb` variable with a new object could leave a connection open (I could be wrong). I would check to see if `$mydb` is already instantiated from a previous call, and if so, close the connection before spinning up a new instance. eg (sorry can't do neat Markdown code blocks in the comments): `if ($mydb != null) { $mydb->close(); }`
- 1
- 2020-01-21
- joehanna
-
- 2010-09-11
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);
Connecting to a second database is easy in WordPress, you simply create a new instance of the WPDB class and use it the same way you would use the standard $wpdb instance we all know and love.
Assuming the second database has the same login information as the main WP one you can even use the predefined constants from wp-config.php to avoid hardcoding the login information.
/** * 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);
-
これはWadihの答えには多少冗長ですが、私のコード例は少し明確であり、dbログイン定数はほとんどの場合使用するのに適切なものであるため、覚えておくことが重要だと思います.そうしないと、dev-> stage-から移動するときに問題が発生するリスクがあります.>ログインの詳細が変更される可能性のあるライブ環境.This is somewhat redundant to Wadih's answer but I think my code example is a bit clearer and its also important to remember the db login constant's as they are almost always the right ones to use and otherwise you risk issues when moving from dev->stage->live environments where the login details might change.
- 0
- 2010-09-11
- jerclarke
-
`$ second_db-> set_prefix( 'wp _');`を呼び出して、WPDBプレフィックスを設定してWP_Queryとget_postを作成し、正しいSQLクエリを生成します.Set WPDB prefix to make WP_Query and get_post to generate correct sql query by calling `$second_db->set_prefix('wp_');`
- 0
- 2015-10-13
- M-R
-
- 2010-12-29
誰もこれを言っていないので、もっと簡単な方法を追加したいと思いました.
追加のデータベースにアクセスするためのユーザー/パスの詳細がWordPressデータベースと同じである限り、このようなテーブル名の前にデータベース名を使用できます
$query = $wpdb->prepare('SELECT * FROM dbname.dbtable WHERE 1'); $result = $wpdb->get_results($query);
no one has said this so I thought I'd add an even easier way..
as long as your additional database has the same user/pass details to access it as your wordpress database you can use the database name before the table name like this
$query = $wpdb->prepare('SELECT * FROM dbname.dbtable WHERE 1'); $result = $wpdb->get_results($query);
-
私の経験から、これは_get_データに対してのみ機能します.つまり、 `SELECT`を使用します.データを挿入することはできません.From my experience, this only works to _get_ data, i.e. using `SELECT`. You can't insert data.
- 0
- 2015-06-28
- Protector one
-
外部では機能しませんが、it will not work externally,
- 0
- 2019-01-31
- Wasim A.
-
- 2011-04-08
これらは機能しますが、get_post_customやwordpressクエリなどの「その他の」カスタム機能を使用することはできなくなります.簡単な解決策は
$wpdb->select('database_name');
これはデータベースをシステム全体で変更します(mysqlselect_db).database.tableメソッドは、単純なクエリを作成する場合に機能しますが、別のWordPressブログにアクセスする場合はselectを使用できます.完了したら、元に戻す必要があります.そうしないと、ブログで奇妙なことが行われる可能性があります.
While these will work, you'll lose the ability to use the "other" custom features such as get_post_custom and wordpress queries. The simple solution is
$wpdb->select('database_name');
which changes the database system-wide (a mysql select_db). The database.table method works if you just want to make a simple query, but if you want to access another wordpress blog you can use select. You'll just need to change it back when you're done or your blog may do strange things.
-
私はこのソリューションを使用していますが、1つを除いて、うまく機能します.なんらかの理由で `wp_get_post_terms()`は新しく選択されたDBを使用していないようです??私が試した他のすべての関数( `get_post_meta()`、 `get_posts()`など)は問題なく機能しているようですが、 `wp_get_post_terms()`は `DB_NAME`データベースに対して機能しているようです.何か案は?I'm using this solution and it works great, except for one thing. For some unknown reason `wp_get_post_terms()` doesn't seem to use the newly selected DB?? Every other function I've tried (like `get_post_meta()`, `get_posts()` etc) seems to work just fine but `wp_get_post_terms()` seems to work towards the `DB_NAME` database. Any ideas?
- 0
- 2013-07-09
- powerbuoy
-
- 2010-09-10
まだコメントできませんが、Wadih M.の回答を拡張したいと思いました(これはすばらしいことです).
WPのデータベースクラスは、JustinVincentのezSQLのカスタマイズバージョンです.インターフェースが好きで、WordPressベースではないサイトを作りたい場合は、それをチェックしてみてください:http://justinvincent.com/ezsql
I can't comment yet, but I wanted to expand on Wadih M.'s answer (which is great).
WP's database class is a customized version of Justin Vincent's ezSQL. If you like the interface and you're wanting to do a site that's not WordPress-based, you might want to check it out: http://justinvincent.com/ezsql
-
ezSQLは、WPDBから来て、私にとって本当にイライラしました.「prepare」ステートメント、「insert」、「update」はありません... WPDBクラス全体をそのまま使用します.これは、プロジェクトにBackPressからいくつかのファイルを含めることで可能になります.ezSQL was really frustrating for me, coming from WPDB. No "prepare" statements, no "insert" or "update"... I like to use the entire WPDB class as it exists, which is possible by including a couple files out of BackPress in your project.
- 0
- 2011-04-22
- goldenapples
-
@gabrielkリンクが切れています-新しいリンクは次のとおりです:[1] [1]:http://justinvincent.com/ezsql@gabrielk The link is dead - new one is: [1] [1]: http://justinvincent.com/ezsql
- 0
- 2013-11-23
- Hexodus
-
- 2011-04-22
$wpdb
を使用して、2つのブログを更新する必要がある親サイトから2番目のブログデータベースに接続するのに苦労していました.$wpdb->select($dbname, $dbh)
を使用して2番目のデータベースを選択しましたが、それでも最初のデータベースから結果を取得していました.2番目のデータベースでWP関数を呼び出す前に、
wp_cache_flush()
を呼び出してWordPressキャッシュをクリアすることで、問題を解決しました.I was struggling with using
$wpdb
to connect to a second blog database from a parent site that needs to update two blogs. I used$wpdb->select($dbname, $dbh)
to select the second database, but I was still getting results from the first database.I resolved the problem by calling
wp_cache_flush()
to clear the WordPress cache before calling WP functions on the second database.
wpdb
を別のデータベースに接続したい.インスタンスを作成してデータベース名/ユーザー名/パスワードを渡すにはどうすればよいですか?ありがとう