ワードプレスにはデータベースに認証した状態ですぐにSQLを実行できる便利なグローバル変数$wpdbというものがあります。
今回はこの$wpdbを利用してMYSQL文を発行する技をいくつかご紹介したいと思います。
この記事の目次
ワードプレスの$wpdbでSELECTの結果を展開する
ワードプレスの$wpdbを利用してMYSQLのSELECT FROM文を発行し、取得したデータを展開します。
コードは下記のようになります。
global $wpdb; $rows = $wpdb->get_results("SELECT * FROM ".$wpdb->prefix."posts WHERE post_content LIKE '%あ%'"); foreach ($rows as $row) { echo $row->id."<br>"; }
このコードは投稿に「あ」を含む投稿idをすべて出力する例です。
結果をOBJECTではなく、連想配列で取得するには下記のようにします。
global $wpdb; $rows = $wpdb->get_results("SELECT * FROM ".$wpdb->prefix."posts WHERE post_content LIKE '%あ%'", ARRAY_N); foreach ($rows as $row) { echo $row['id']."<br>"; }
ワードプレスの$wpdbでSELECTの結果の数を取得する
下記のようなコードで上記の結果数を取得できます。
$number = count($rows);
また、SQL文を下記のようにすることでも数を取得できます
global $wpdb; $number = $wpdb->get_results("SELECT COUNT(ID) FROM ".$wpdb->prefix."posts WHERE post_content LIKE '%あ%'");
$wpdbでテーブルをCREATEする
global $wpdb; $tableName = "mytable"; //テーブル名を指定 $createsql = "CREATE TABLE " . $wpdb->prefix . $tableName . " ( id int(11) unsigned PRIMARY KEY AUTO_INCREMENT, data varchar(1028) ) " . $wpdb->get_charset_collate() . ";"; dbDelta($createsql);
$wpdbでデータを削除する
$wpdb->queryでDELETE FROM を発行してもよいですし
$wpdb->query("DELETE FROM ".$wpdb->prefix."posts WHERE ID = 1");
下記のようにdelete関数を利用することも可能です。
$wpdb->delete( $wpdb->posts, array( 'ID' => 1) );
$wpdbでSQLをエスケープしつつINSERTする
global $wpdb; $tablename = "mytable"; $id = 1; $name = "aaa"; $sql = $wpdb->prepare( "INSERT INTO ".$wpdb->prefix.$tablename." (id, name) VALUES (%d , %s)" , $id , $name); $wpdb->query($sql);
$wpdbでUPDATEする
$result = $wpdb->query("UPDATE ".$wpdb->prefix."posts SET post_content='aaaaa' WHERE ID=1");
$resultには影響を受けた行の有無が入ります。
上記のコードは下記と同じ意味になります。
$result = $wpdb->update( $wpdb->posts, array( 'post_content' => 'aaaa' ),array( 'ID' => 1 ));
$result にはアップデートされた行の数が入ります。
WordPress ワードプレスのカスタマイズ・エラーの修正、復旧、移行などのご相談ご依頼はWPドクターまでお気軽にお送りくださいませ