SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

アイエニウェア・ソリューションズ ドキュメント翻訳(PR)

WordPressをSQL Anywhereと組み合わせて使用するには

原文: How To: Running WordPress with SQL Anywhere

  • このエントリーをはてなブックマークに追加

WordPress環境をSQL Anywhere向けに変更する

 これで新しいブログができました。実際にブログエントリを作成、表示し、他のWordPressのブログ管理ツールを使用するためには、MySQL固有の構文をSQL Anywhere用に書き換える必要があります。この場合も、一番簡単なのは、WordPressのすべてのインストールファイルを検索し、すべての不適切な構文を適切な構文に書き換えることです。

 しかし、ソリューションの汎用性を高めたい場合は、db.phpファイル内部のクエリを書き換えた方が、SQL Anywhereを新しいWordPress環境のDBMSとして簡単にインストールできるようになりますし、WordPressソフトウェアの保守やアップグレードの手間も大幅に軽減されます。

 幸い、この問題は簡単に解決できます。SQL AnywhereはWordPressで使用されるMySQLの機能をすべてサポートしているからです。ただ少々厄介なのは、SQL AnywhereはMySQLとは異なる構文を使用するという点です(SQL Anywhereはほぼ全面的にANSIに準拠しており、SQL構造体についてのANSI仕様がない部分ではMySQLの構文よりもMicrosoft SQL Serverの構文に近いものを使用します)。そのため、db.phpファイル内の構文をマッピングする方法を見つけなければなりません。

書き換え関数の作成

 そこで役に立つのが検索置換と正規表現です。構文をマッピングする一番簡単な方法は、どのクエリよりも先に呼び出される「書き換え」関数を作成することです。幸いWordPressでは、すべてのクエリがdb.phpファイル内の「クエリ」関数を経由するため、新しい書き換え関数を追加して、それをquery()関数から呼び出せば済みます。

 この書き換えを行うrewrite_query()関数は、基本的に特定のクエリ構造体を検索し、それを目的の形式に置換します。例えば、WordPressではLIMIT句を多用しますが、これはSQL AnywhereのTOP N句を使用する動作に対応しています。このようなクエリを書き換えるために、筆者は書き換え関数の中で次のコードを使用しました。

//Find LIMIT clause integer arguments and replace with 
//TOP N START AT m
//MySQL syntax for LIMIT is:
// LIMIT {[offset,] row_count | row_count OFFSET offset}]
//Note that the LIMIT clause is at the end of the query
//The pattern is LIMIT followed by an integer, possibly 
// followed by a comma and another integer
$pattern = "/LIMIT\s*(\d+)((\s*,?\s*)(\d+)*)/i"; 
$matched = preg_match( $pattern, $query, $limitmatches );
if( $matched == 1 ) {
//Remove the LIMIT statement, replace offset 0 with 1
$query = preg_replace( $pattern, '', $query);
if( count( $limitmatches ) == 5 ) {
if( $limitmatches[1] == '0' ) {
$limitmatches[1] = '1';
}
$replacement = 'SELECT TOP '.$limitmatches[4].' START AT '.$limitmatches[1].' ';
} else {
$replacement = 'SELECT TOP '.$limitmatches[1].' ';
} 
$query = preg_replace( '/^\s*SELECT\s*/i', $replacement, $query );

 この作業を他のいくつかの構造体についても実行する必要がありました。必要な作業を終えたら、それらをまとめてrewrite_query()関数に挿入しました。書き換え関数の完全なリストについては、ここを参照ください。

SQL Anywhereを使用したブログの実現

 ここまでの作業を終えると、ブログは完全に機能するようになります。新しいブログを作成し、すべての管理機能を実行できます。この方法の最大の利点は、1つのファイル(db.php)を任意のWordPress環境に追加するだけで、WordPressをMySQLからSQL Anywhereへ移行できることです。SQL Anywhere移行ウィザードを使用して、既存のブログをブログエントリごとSQL Anywhereデータベースに移行することもできます。同じ手法を利用して、任意のPHPベースのデータベースアプリケーションをSQL Anywhereに移行することもできます。

 この修正版WordPressを利用したブログの実例はここで見ることができます。

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
アイエニウェア・ソリューションズ ドキュメント翻訳連載記事一覧

もっと読む

この記事の著者

Jason Hinsperger(Jason Hinsperger)

15年間にわたりSQL Anywhere関連の仕事に従事。Sybase iAnywhereの上級プロダクトマネージャーとして、SQL Anywhereに関する豊富な知識を記事や講演という形で定期的に発表している。SQL Anywhereの仕事をしていないときや新しいテクノロジーを学んでいないときは、...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5467 2010/11/16 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング