wpdbクラスを使ってテーブル操作を行う方法をまとめました。
※目次をクリックすると目次の下部にコンテンツが表示されます。
wpdbクラスの概要
・wp-includes/wp-db.php内に配置。
・PHPコードでWordPressデータベースにクエリーを実施する際にwpdbクラスを使用する。
このwpdbクラスを使用する事によってクエリを安全に実行できる。
・PHPコードでWordPressデータベースにクエリーを実施する際にwpdbクラスを使用する。
このwpdbクラスを使用する事によってクエリを安全に実行できる。
wpdbクラスの基本的な使用方法
●グローバル$wpdbクラス
wpdbクラスを使用するにはグローバル変数として$wpdbを宣言しなければならない。
global $wpdb;
●get_var()関数
・データベースから変数を一つ返す。
・変数は一つしか返ってこないが、クエリの結果はすべてキャッシュされ、あとから使うことができる。
○構文
$wpdb->get_var( ‘query’, column_offset, row_offset )
query:実行したいSQLクエリ。パラメータを null にすると、前回のクエリ結果のキャッシュ中から指定した変数を返す。
column_offset:必要としている列のオフセット。
row_offset:必要としている行のオフセット。
例)
$user_count = $wpdb->get_var( “SELECT COUNT(*) FROM $wpdb->users” );
echo “<p>User count is {$user_count}</p>”;
●query()関数
○構文
$wpdb->query(‘query’);
一般的なSQLクエリを実行。
●prepare()関数
・SQLクエリに渡された変数をエスケープしてくれる。
・SQLインジェクション攻撃に対する備えとして重要。
・すべてのクエリはこの関数を介して実行すべき。
例)
wpdbクラスを使用するにはグローバル変数として$wpdbを宣言しなければならない。
global $wpdb;
●get_var()関数
・データベースから変数を一つ返す。
・変数は一つしか返ってこないが、クエリの結果はすべてキャッシュされ、あとから使うことができる。
○構文
$wpdb->get_var( ‘query’, column_offset, row_offset )
query:実行したいSQLクエリ。パラメータを null にすると、前回のクエリ結果のキャッシュ中から指定した変数を返す。
column_offset:必要としている列のオフセット。
row_offset:必要としている行のオフセット。
例)
$user_count = $wpdb->get_var( “SELECT COUNT(*) FROM $wpdb->users” );
echo “<p>User count is {$user_count}</p>”;
●query()関数
○構文
$wpdb->query(‘query’);
一般的なSQLクエリを実行。
●prepare()関数
・SQLクエリに渡された変数をエスケープしてくれる。
・SQLインジェクション攻撃に対する備えとして重要。
・すべてのクエリはこの関数を介して実行すべき。
例)
$metakey = "Harriet's Adages"; $metavalue = "WordPress' database interface is like Sunday Morning: Easy."; $wpdb->query( $wpdb->prepare( "INSERT INTO $wpdb->postmeta ( post_id, meta_key, meta_value ) VALUES ( %d, %s, %s )", 10, $metakey, $metavalue ) );
wpdbクラスを使ってデータ取得、更新
1)データ取得
●行のSELECT get_row()
・クエリから行全体を取り出す。
・行がオブジェクト、連想配列、またはインデックス配列として返される。
・クエリが一つ以上の行にマッチする場合は、あとから使えるようにすべての行がキャッシュされるが、実際に返されるのは指定された行のみ。
○構文
$wpdb->get_row(‘query’, output_type, row_offset);
query:実行したいクエリ。
output_type:以下の定数のいずれか。初期値は OBJECT。
OBJECT – 結果をオブジェクトとして出力。
ARRAY_A – 結果を連想配列として出力。
ARRAY_N – 結果をインデックス配列として出力。
row_offset:必要としている行のオフセット。
例)
$mylink = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->links WHERE link_id = %d", 10 ), ARRAY_A ); echo $mylink['link_id']; // "10" をプリント
●複数行の結果を取得 get_results()
・クエリの結果全体を配列として返す。
・この配列の各要素はクエリ結果の各行と対応しており、get_rowと同じくオブジェクト、連想配列、またはインデックス配列のいずれかを指定することができる。
○構文
$wpdb->get_results( ‘query’, output_type );
query:実行したい SQL クエリ。
output_type:以下の4つの定数のいずれか。初期値はOBJECT。
OBJECT – 結果を行オブジェクトのインデックス配列として出力。
OBJECT_K – 結果を行オブジェクトの連想配列として出力。
ARRAY_A – 結果を連想配列として出力。
ARRAY_N – 結果をインデックス配列として出力。
例)
$fivesdrafts = $wpdb->get_results( "SELECT ID, post_title FROM $wpdb->posts WHERE post_status = 'draft' AND post_author = 5" ); foreach ($fivesdrafts as $fivesdraft) { echo $fivesdraft->post_title; }
2)挿入、更新、削除
・insert(),update(),delete()関数は、関数に渡されたクエリとデータを結合する際に内部でprepare()関数を使用しているので、prepare()関数でラップして使用する必要はない。
●挿入
○構文
$wpdb->insert( $table, $data, $format ); ?>
table:データを挿入するテーブル名。
data:(array)挿入するデータ。(column => valueペア)
format:(array|string):挿入する各カラムのフォーマット
例)
$wpdb->insert('table', array( 'column1' => 'value1', 'column2' => 123 ), array( '%s', '%d' ) );
●更新
○構文
$wpdb->update( $table, $data, $where, $format, $where_format );
例)IDが1、TYPEが”new”で一つ目の列の値が文字列、2つ目の列の値が数値、という行を更新。
$wpdb->update('table', array( 'column1' => 'value1', 'column2' => 123 ), array( 'ID' => 1, 'TYPE' = > "new" ), array( '%s', '%d' ), array( '%d' '%s' ) );
●削除
○構文
$wpdb->delete( $table, $where, $where_format = null );
例)
$wpdb->delete( ‘table’, array( ‘ID’ => 1 ), array( ‘%d’ ) );
wpdbクラスでSQLエラーを表示
●SQLエラーの表示・非表示
・show_errors()とhide_errors()を使い、エラーの出力を有効化・無効化できる。
・最後に実行されたクエリにエラーがある場合、print_error()でそのエラーを表示できる。
例)
$wpdb->show_errors(); //クエリ実行前に実行する
$results = $wpdb->get_results( ‘SELECT * FROM wp_options WHERE option_id = 1’, OBJECT );
$wpdb->print_error();
●キャッシュのクリア
・SQLの結果のキャッシュは、flush()でクリアできる。
・$wpdb->last_result、$wpdb->last_query、$wpdb->col_infoがリセットされる。
●意図した結果にならない原因究明時に有用なクラス変数
・$num_queries
実行されたクエリの数。
・$last_query
最後に実行されたクエリ。
・$last_error
最後に出力されたエラーメッセージ。
・$last_result
最後に実行されたクエリの結果。
・$col_info
最後に実行されたクエリの列情報。
・$insert_id
最後に実行されたINSERTクエリで、AUTO_INCREMENTによって生成されたID。
・$num_rows
最後に実行されたクエリで返された行の数。
・$queries
実行されたすべてのクエリを保存。wp-config.php内でdefine( ‘SAVEQUERIES’, true );を記述し、有効にする必要がある。
例)
var_dump( $wpdb->num_queries );
・show_errors()とhide_errors()を使い、エラーの出力を有効化・無効化できる。
・最後に実行されたクエリにエラーがある場合、print_error()でそのエラーを表示できる。
例)
$wpdb->show_errors(); //クエリ実行前に実行する
$results = $wpdb->get_results( ‘SELECT * FROM wp_options WHERE option_id = 1’, OBJECT );
$wpdb->print_error();
●キャッシュのクリア
・SQLの結果のキャッシュは、flush()でクリアできる。
・$wpdb->last_result、$wpdb->last_query、$wpdb->col_infoがリセットされる。
●意図した結果にならない原因究明時に有用なクラス変数
・$num_queries
実行されたクエリの数。
・$last_query
最後に実行されたクエリ。
・$last_error
最後に出力されたエラーメッセージ。
・$last_result
最後に実行されたクエリの結果。
・$col_info
最後に実行されたクエリの列情報。
・$insert_id
最後に実行されたINSERTクエリで、AUTO_INCREMENTによって生成されたID。
・$num_rows
最後に実行されたクエリで返された行の数。
・$queries
実行されたすべてのクエリを保存。wp-config.php内でdefine( ‘SAVEQUERIES’, true );を記述し、有効にする必要がある。
例)
var_dump( $wpdb->num_queries );