IT家・挑戦雑記

情報を制する者は世界を制す!

WordPressを利用していると
このページにアクセスするための十分なアクセス権がありません
と怒られてしまうケースがあります。

私の場合、システムログイン後にこのメッセージが出ました。

その状況や原因を以下にて解説します。

━━━━━━━━━━━━━━━━━━━━━━━━━
★状況
 ・テーブルのprefix名を変更

 DBテーブルとwp-config.phpのprefix名を変更した際、
 WordPressで管理画面にIDとパスワードを入力してログイン後、
 「このページにアクセスするための十分なアクセス権がありません」
 とうい警告メッセージが表示される。
 ※管理画面で操作不可
 ※ブログ閲覧は問題なし

★環境
 ◆サーバーサイド
  ・OS:CentOS 5.5
   ・PHP:5.3.3
    ・WordPress 3.01
   ・Apache:2.2.3
   ・MySQL:5.1.50-1

 ◆WordPressのテーブル一覧(全11テーブル)
  1: (prefix名)_commentmeta
  2: (prefix名)_comments
  3: (prefix名)_links
  4: (prefix名)_options
  5: (prefix名)_postmeta
  6: (prefix名)_posts
  7: (prefix名)_terms
  8: (prefix名)_term_relationships
  9: (prefix名)_term_taxonomy
  10: (prefix名)_usermeta
  11: (prefix名)_users
  ※(prefix名) ・・・ ユーザ指定のprefix名

★原因
 ・DBのテーブルprefixの変更が不十分

★解決
 テーブルprefix名を変更する際には、
  ・DBのテーブルprefix名を変更
  ・wp-config.phpのprefix名を変更
  ・以下の2テーブル内に存在するprefix名を変更
   1.(prefix名)_usermeta ・・・ フィールド:meta_key
   2.(prefix名)_options ・・・ フィールド:option_name

以下のようなビットマスクを利用したテーブルを作成した時、
それを抽出するためのSQL文を紹介します。

■対象のテーブル
 
 テーブル名:名産
 100308-01

■SQLサンプル

 ◆「お茶」と「わさび」のレコードを抽出する場合
  
  ・[1.a] ORを使用した抽出方法
   SELECT `名産`.項目
   FROM `名産`
   WHERE `ID(ビット値)` = 1 OR WHERE `ID(ビット値)` = 4
  
  ・[1.b] ビット値を条件にした抽出方法
   SELECT `名産`.項目
   FROM `名産`
   WHERE `ID(ビット値)` & 5
  
  ・抽出結果([1.a],[1.b]共に同じ)
   
   お茶
   わさび
   
   ※[1.b]のwhere句の5(1+4)は、「お茶」=1, 「わさび」=4の合計値
 
 ◆「お茶」のレコードを抽出する場合
  
  ・[2.a] 通常??の抽出方法
   SELECT `名産`.項目
   FROM `名産`
   WHERE `ID(ビット値)` = 1
  
  ・[2.b] ビット値を条件にした抽出方法
   SELECT `名産`.項目
   FROM `名産`
   WHERE `ID(ビット値)` & 1
  
  ・抽出結果([2.a],[2.b]共に同じ)
   
   お茶

■ポイント!
 ビット値を条件に抽出を行う際には、&(アンパサンド)を利用する!