下記サンプルの前提条件
global $wpdb; //グローバル宣言
$table_name = $wpdb->prefix . ‘wp-を除いたテーブル名’; // テーブル名のプレフィックスを作成
目次
SELECT文
通常のSELECT文
//重複を削除して、キャリアを取り出す $results = $wpdb->get_results($wpdb->prepare("SELECT DISTINCT pl_maker FROM $table_name WHERE pl_career = %s", $career ), ARRAY_A);
1 |
<strong>$wpdb->get_results( $query, $output_type );</strong> |
- query
(文字列) 実行したい SQL クエリ。 - output_type
以下の4つの定数のいずれか。初期値は OBJECT。詳細および例については、行の SELECT セクションを参照。
OBJECT – 結果をインデックス配列として出力。要素は行オブジェクト。
OBJECT_K – 結果を連想配列として出力。第1カラムの値をキー(重複は無視される)、行オブジェクトを値とする。
ARRAY_A – 結果をインデックス配列として出力。要素は1行を表す連想配列で、そのキーはカラム名。
ARRAY_N – 結果をインデックス配列として出力。要素は1行を表すインデックス配列。
$results = $wpdb->get_results("SELECT pl_career FROM $table_name", ARRAY_A);
行を取り出す
<?php $wpdb->get_row( $query, $output_type, $row_offset ); ?>
- query
(文字列) 実行したいクエリ。 - output_type
以下の定数のいずれか。初期値は OBJECT。
OBJECT – 結果をオブジェクトとして出力。
ARRAY_A – 結果を連想配列として出力。
ARRAY_N – 結果をインデックス配列として出力。 - row_offset
(整数) 必要としている行のオフセット (一つ目は 0)。初期値は 0。
クエリから行全体を取り出すには、「get_row」を使います。連想配列、またはインデックス配列として返されます。クエリが2行以上にマッチする場合は、後から使えるようにすべての行がキャッシュされますが、実際に返されるのは指定された行のみです。マッチする行がなければ NULL
を返します。
条件を入力値から渡す場合は、「prepare」を使う。また、下記の例ではSELECT DISTINCTとすることで、重複データを削除しています。
条件なしの場合
$results = $wpdb->get_row("SELECT * FROM $table_name", ARRAY_A);
検索に使用するSELECT文
テーブルのフィールドを結合してlikeで検索。
//SQL文の組み立て $search = ''; if ( ! empty( $_REQUEST['s'] ) ) { $search = "AND CONCAT (cs_last_name,cs_first_name,cs_email,cs_tel1) LIKE '%%" . esc_sql( $wpdb->esc_like( $_REQUEST['s'] ) ) . "%%'"; } $items = $wpdb->get_results( "SELECT * FROM $table_name WHERE 1=1 {$search}" . $wpdb->prepare( "ORDER BY ID DESC LIMIT %d OFFSET %d;", $per_page, $offset ),ARRAY_A);3つのフィールド
LIKE検索と条件一致が混在するクエリ
$career = esc_html($career); $maker = esc_html($maker); //無害化 $model = '%%' . $wpdb->esc_like($model) . '%%'; //LIKE検索に使うための無害化 $wpdb->esc_like() $sql = " SELECT pl_career, pl_maker, pl_model, pl_image, pl_new_price ,pl_used_high_price, pl_used_low_price FROM $table_name WHERE (pl_model LIKE %s) AND pl_maker = %s AND pl_career = %s "; $sql = $wpdb->prepare( $sql, $model, $maker, $career ); $lists = $wpdb->get_results(($sql), ARRAY_A);$search_word = '%%' . $wpdb->esc_like($search_word) . '%%'; //LIKE検索に使うための無害化 $wpdb->esc_like() $sql = " SELECT * FROM $table_name WHERE CONCAT (pl_model,pl_keyword) LIKE %s AND pl_career = %s "; $sql = $wpdb->prepare( $sql, $search_word, $career_word ); $items = $wpdb->get_results(($sql), ARRAY_A);2つのフィールドにわたってLIKE検索を行う。
$wpdb->esc_like()はLIKE検索の為の無害化処理除外条件があるSELECT文
$results = ''; //初期化等 $exclusion = '処理済み'; //除外したいワードを入れる global $wpdb; $table_name = $wpdb->prefix . 'summary'; // テーブル名のプレフィックスを作成 //重複を削除して、データを取り出す $query = "SELECT DISTINCT product, size FROM $table_name WHERE status = %s AND status NOT LIKE %s"; $results = $wpdb->get_results( $wpdb->prepare( $query, $status, $exclusion ),ARRAY_A );UPDATE文
//更新したい内容 $data = array( 'cs_temp_pass' => $temp_pass, 'cs_temp_datetime' => $temp_datetime ); //更新したい行の条件 $condition = array( 'ID' => $check_acount['ID'] ); $dataFormat = array('%s'); $conditionsFormat = array('%d'); $wpdb->update($table_name, $data, $condition,$dataFormat,$conditionsFormat); //又は //更新したい内容 $data = array( 'cs_temp_pass' => $temp_pass, 'cs_temp_datetime' => $temp_datetime ); //更新したい行の条件 $condition = array( 'ID' => $check_acount['ID'] ); //データ型指定 $dataformat = array( '%s', '%s' ); //条件のデータ型 $conditionformat = array('%d'); $result = $wpdb->update($table_name, $data, $condition, $dataformat, $conditionformat);INSERT文
$wpdb->query( $wpdb->prepare( " INSERT INTO $table_name ( cs_last_name, cs_first_name, cs_last_name_furi, cs_first_name_furi, cs_email, cs_pass ) VALUES ( %d, %s, %s, %s, %s, %s ) ", array( $cs_last_name, $cs_first_name, $cs_last_name_furi, $cs_first_name_furi, $cs_email, $cs_pass, ) ) ); $cs_ID = $wpdb->insert_id; //インサートしたIDを取得