データベース

の記事

  • WordPress マルチサイトを移行する際のメモ

    マルチサイトを移行する際につまづいたところを、自分のために書いておこう。

    当サイトの WordPress を長らく更新していなかった。
    更新ついでに、ダッシュボードで警告が出ていた PHPのバージョンと MySQL も更新しようとステージングサイトを用意することにした。Web に関わる仕事をしていながら ここをサボっていた理由は マルチサイトのためだ。

    (さらに…)
    WordPress マルチサイトを移行する際のメモ
  • WordPressで同じドメインの別サーバーに引っ越す

    サーバー機入れ替えのため、同じドメインで別サーバーに引っ越したときのメモ。

    (さらに…)

    WordPressで同じドメインの別サーバーに引っ越す
  • DBに連想配列を保存するには

    DBテーブルのwp_optionsやwp_postmetaに配列っぽいデータが保存されているのを見ることがある。たとえば wp_postmetaでは_”wp_attachment_metadata”というキーに”a:5:{s:5:”width”;s:3:”145″;s:6:”height”;s:2:”74″;s:14:”hwstring_small”;s:23:”height=’65’ width=’128′”;s:4:”file”;s:35:”2010/…”というようなデータが保存されている。画象を添付した際のパスやサイズなどのメタデータである。

    この形式を自分でも利用することができる。
    例えばwp_optionsに保存するには、
    INSERT INTO wp_options(option_id, blog_id, option_name, option_value, autoload) VALUES(null, 0, ‘my_messages’, maybe_serialize( $messages ), ‘yes’)
    というようなSQLを実行すればよい。連想配列$messagesをシリアライズしたものをoption_valueにセットする。maybe_serialize()は、WordPressの関数である。

    このデータを取得するには、SQLでSELECTして得た値を、
    $messages = maybe_unserialize($result->option_value);
    とすることで連想配列にセットされる。

    ちょっとした情報を保存したいならプラグイン用にテーブルを作成するのではなく、 wp_optionsに保存する手段もあるのだ。Contact Form 7 のコードを見てて、この仕組みがやっと分かった。

  • プラグイン用のテーブルを作成するには

    WordPressをインストールする際にMySQLに作成されるテーブルのほかに、自作プラグインでもテーブルを作成することができる。アクションフックのregister_activation_hookを定義しておくとプラグインが有効になった際に関数が呼ばれるので、ここでテーブルを作成する。テーブル名にはWordPressの接頭辞を使用すること。
    以下は、wp_sampleというテーブルを作成する例。

    [sourcecode language=’php’]
    function myActivation() {

    global $wpdb;

    $table_name = $wpdb->prefix . “sample”;
    if($wpdb->get_var(“show tables like ‘$table_name’”) != $table_name) {

    $sql = “create table ” .$table_name .” (
    ID bigint not null auto_increment,
    name varchar(64) NOT NULL,
    furigana varchar(64) default NULL,
    url varchar(64) default NULL,
    primary key(ID)
    )”;

    $results = $wpdb->query($sql);
    }
    }

    register_activation_hook(__FILE__, ‘myActivation’);
    [/sourcecode]

    プラグインが無効化された際の処理は以下を使用する。
    [sourcecode language=’php’]
    register_deactivation_hook(__FILE__, ‘myDeactivation_’);
    [/sourcecode]

  • ActivePerlでMySQL

    XAMPPでPerlが動くようになったものの、そう簡単にMTのインストールは進まなかった。MySQLがない模様だ。SQLiteで済ませようとしたのに、MT5からデータベースがMySQLのみになっていることにここで気づいた。

    ActivePerlでMySQLをインストールしなければならない。ハードルをクリアするとまたすぐに次のハードルが現れる。ActivePerlに付いてくるPPMというツールを使うらしいのだが、実行しようとするとネットに接続中のまま「応答なし」となる。Firewallのせいということに気がつくのも時間がかかった。また今日も挫折しそうになる。
    ググりまくって、PPMを実行するまえにコマンドプロンプトで
    C:\>set HTTP_PROXY=http://[プロキシ名]:[ポート番号]
    とするといいらしいと知った。
    続けて、
    C:\usr\bin> PPM install DBD-Mysql
    とするとなにやらジャカジャカとインスールが始まった。コマンドプロンプトを活用するとは、ン十年ぶりのことだ。かくしてPerlでMySQLが使えるようになった。

    ここからはMTのウィザードに従ってスムーズに進み、First Blogを作成するまでが完了した。

  • DBのテーブル名

    プラグインでSQL文を記述する場合の、テーブル名の参照のしかた、

    WORDPRESSで使用するテーブル名は”wp_”とは限らないため、プラグインでSQLを使う場合は、$wpdb->(接頭語より後の名前)でテーブルを参照する。例えば投稿テーブルは、$wpdb->postsとなる。
    または接頭語$wpdb->prefixを使って参照することもできる。投稿テーブルは、$wpdb->prefix .”posts”となる。
    自分で追加したテーブルは、$wpdb->prefix .”(接頭語より後の名前)”となる。