Web/DTP
wpdb関数でWordPress上からデータベースを操作する
はち
更新日:2021/08/05
WordPressって便利ですよね。
このサイトもWordpressを使って作成しています。
WordPressって記事とかをDBに保存し、それを読み書きしている仕組みなんですが、Wordpressで、Wordpressが使用するDB以外のDBを参照したいと思う時。
例えば別の会社が作ったシステムと連動させたいとか、自作のプラグインを作る時、とか。
どうしても、既存のテーブル以外のテーブルが必要だ、とかあるかと思います。
そういう時、mysql_queryとかでいちいちデータを取得したりコネクションを貼ったりする。
…のもいいんですが、そんなやり方ではなく、Wordpressには実はデータベースを操作するwpdbという便利な関数がありますので、この関数を使うのがスマートかと思います。
せっかく用意されたものですし。
wpdbの基本定義
1 2 3 4 5 6 |
global $wpdb; $db_user = $wpdb->dbuser; //データベース接続ユーザーの取得 $db_passwd = $wpdb->dbpassword; //データベース接続用パスワードの取得 $db_host = $wpdb->dbhost; //データベースホストの取得 $db_name = "sample"; //使用するデータベース名 $other_wpdb = new wpdb($db_user, $db_passwd, $db_name, $db_host); |
$wpdb->の後にパラメタを指定することで、データベース用のユーザIDやPW、ホストなどを取得できます。
ここで取得するユーザIDなどは、wp-config.phpで指定してあるものです。
ここではわかりやすいように、
$other_wpdbにはWordpressで使用する以外のテーブルの情報を保持するようにしています。
結果を取得してみる
1 2 3 4 5 6 |
$results = $other_wpdb->get_results($wpdb->prepare(' SELECT * FROM sample_table ')); |
get_resultsの中にSQL文を書くことで簡単に結果を取得することが出来ます。
$wpdb->prepare は、SQLクエリをエスケープするときに用います。
インジェクション対策として使っておく方が安全かと思います。
1 2 3 |
foreach ($results as $key => $value) { $getdata[] = $value->row; } |
取得したresultsをforeachで回して、取得します。
$resultsは配列ではなく、オブジェクトなので
$value->列名(ここではrowとしています)で、値を取得できます。
あとはこれをechoなりprintなりしてやれば簡単に画面出力が出来るわけです。
こんなに簡単にできるのにmysql_query使って頑張るのアホらしくないですか?
データの挿入
1 2 3 4 5 6 7 |
$arr_ins_data = array( 'id' => '', 'row_a' => '値', 'row_b' => '値', 'date' => '値' ); $other_wpdb->insert("table_name", $arr_ins_data); |
データの更新
1 2 3 4 5 6 7 |
$arr_upd_data = array( 'id' => '', 'row_a' => '値', 'row_b' => '値', 'date' => '値' ); $other_wpdb->update("table_name",$arr_upd_data,$arr_where); |
挿入も更新も簡単にできます。
SQL文を別ファイル化して、読みこむようにするとか、もっとカッコイイやり方もあると思いますが、最低限の操作は全てコレで出来るので、是非覚えておきたいところです。
関数リファレンスはここ → WordPress Codex