Posts Tagged ‘MySQL’

Ubuntu で PHP + MySQL + バーチャルホストでの開発環境を最速で作る方法

今日は外部要因で疲れていたので、休憩を兼ねて Ubuntu を弄りました。

ぽけけーと弄ってたら、とても簡単に開発環境が構築できてしまったので、もしかすると苦戦するかもしれない人たちのためにメモを残しておきたいと思います。参考にしてください。

私は以下のページを参考に作業させていただきました。
UbuntuでApache+PHP+MySQLの開発! | 不定期ソフトウェア開発

インストール

以下のコマンドでインストールができます。適当に進めてください。
終わりましたら http://localhost/ にアクセスするとページが表示されます。
ドキュメントルートは /var/www でした。

1
sudo apt-get install apache2 php5 php5-gd mysql-server php5-mysql phpmyadmin

Apache を起動すれば PHP が使えるようになります。

1
sudo apache2ctrl start

バーチャルホストの設定

http://example で /var/www/example 以下のファイルを表示されるようにします。
私が便利だと思う方法でやっていきますので、定石を知りたい方は他のサイトを参考にしてください。

追記: また記事末尾に @isidai さんからのアドバイスをいただきましたので、まとめておりますので、先にそちらをご覧いただくと良いかもしれません、私はまだ試していませんが、いつか試します。

まず /etc/apache2 に移動します。大概の設定ファイルはここにあるはずです。

1
cd /etc/apache2

次にバーチャルホストが大量に増えても編集がしやすいように、バーチャルホストの設定ファイル用のディレクトリを作成します。ここにたくさんの設定ファイルを入れていく予定です。

1
sudo mkdir /etc/apache2/vhosts

vhosts 内のバーチャルホストの設定ファイルを読み込むように httpd.conf に読み込みの設定を加えます。

1
sudo vi httpd.conf

以下のように拡張子 .conf ファイルを読み込むように書き加えてください。

#vhosts
Include /etc/apache2/vhosts/*.conf

バーチャルホストの設定ファイルを作成し、編集をします。

1
2
3
cd /etc/apache2/vhosts
sudo touch example.conf
sudo vi example.conf

以下のように記述してください。

<VirtualHost *:80>
        DocumentRoot "/var/www/example"
        ServerName example
        <Directory "/var/www/example">
                order deny,allow
                allow from All
        </Directory>
</VirtualHost>

次に hosts ファイルを編集します。

1
sudo vi /etc/hosts

以下のように記述します。

127.0.0.1 example

これで設定は一通り終わりですので、Apache を再起動します。

1
sudo apache2ctl restart

適当に /var/www/example 以下にファイルを置いて http://example からそのファイルへアクセスすると見れるはずです。何か問題がありましたらご指摘ください。

@isidai さんからのアドバイス

どうやらもっと簡単な a2ensite コマンドを使う方法もあるようです。
記事投稿後、すぐにアドバイスをいただきました。

@soraiy いやいや、全然あれでもいいし楽ですけどねー。Debianだと /etc/apache2/available-sites の中に設定ファイルを入れて、 a2ensite example.com みたいにすると有効化、 a2dissite を使うと無効化できます。

@soraiy モジュールも a2enmod / a2dismod コマンドで有効化・無効化が切り替えられます。単にシンボリックリンクを sites-enable / mods-enable に貼ったり消したりしてる仕組みですけど、それがDebianでは標準コマンドなので…

どうやら簡単に追加・削除ができるそうで、こちらが一般的な方法かもしれません。
ありがとうございました @iisidai さん、とても勉強になりました!

Mac に MacPorts を使って MySQL と PHPMyAdmin をインストールする方法

Mac に MySQL をインストールする。とても難しそうなことですが、なんとか終わりました。所要時間は4時間くらいです。
実際には MacPorts を使ってコマンドを叩けば良いのですが、私の脳が足りず時間がかかってしまいました。あ、ちなみに MacPorts を入れてない場合は Mac OS 10.6 に MacPorts を入れる際に役に立ったサイトを参考にして入れてくださいね。

MySQL をインストール

Twitter と MySQL / Mac OS X を参考に進めてみました。
ほぼ引用ですが、躓いたところに補足コメントしたり、順序を変えたりしています。

1
$ sudo port install mysql5 +server

あ、以下の2種類に分解してもいけます。

1
$ sudo port install mysql5
1
$ sudo port -v install mysql5-server

MySQL の初期化をします。

1
$ sudo -u mysql mysql_install_db5

MySQL を起動テスト。
上手く行けば SUCCESS とでるはずですが ERROR と出れば何か上手くいなかった可能性がありそうです。

1
$ sudo /opt/local/share/mysql5/mysql/mysql.server start

root ユーザにパスワードを設定します。ここでは password と設定します。

1
$ /opt/local/lib/mysql5/bin/mysqladmin -u root password 'password'

ログインができるかテストします。

1
/opt/local/lib/mysql5/bin/mysql -u root -ppassword

ログインの仕方はちょっと躓きましたが以下のページが参考になりました。
MySQL をインストール / Mac OS 10.4.2 | Bowz::Notebook

起動時に MySQL サーバーを自動的に起動するように設定できるみたいです。

1
$ sudo launchctl load -w /Library/LaunchDaemons/org.macports.mysql5.plist

PHPMyAdmin

MySQL はきちんと動いていることを確認したことですし、PHPMyAdmin をインストールしてみましょうか。
今回は最新バージョンの 3.3.3 を入れてみることにしました。

任意のディレクトリに PHPMyAdmin を入れてログインしようとすると以下のエラーがでる場合は PHP の方を設定する必要があります。

#2002 MySQL サーバにログインできません

php.ini を設定しましょう。ちなみに、まだ php.ini がまだ無い人は /private/etc/ に php.ini.default がありますので、それをコピーして使いましょう。

1
2
$ sudo cp /private/etc/php.ini.default /private/etc/php.ini
$ sudo vi /private/etc/php.ini

socket のパスがダメのようです。以下のサイトがとても参考になりました。最高に素晴らしいページだと思います。前々から目にしていたサイトだったので、まさかここでここまで助けられるとは。この部分だけで4時間詰まりましたもん。
Mac OS X LeopardでPHPからMySQLに接続する – このブログは証明できない。

1217 行あたりだと思うんですが、mysql.default_socket を以下のように変更してください。

mysql.default_socket = /opt/local/var/run/mysql5/mysqld.sock

1276 行あたりだと思うんですが、mysqli.default_socket を以下のように変更してください。

mysqli.default_socket = /opt/local/var/run/mysql5/mysqld.sock

これで動くはずだと思います。

以下のサイト達の記事の一部で php.ini に問題があるかもしれないと思えました。
Mac にphpMyAdmin を入れる手順 – Slow Dance
Mac OS X 10.5 と php.ini – 風ブログ

そして最後に PHPMyAdmin にログインすると以下のようなエラーが出るかもしれません。

リンクテーブルを処理するための追加機能が無効になっています

以下のサイトに解決方法がのっていますよ。素晴らしいページですよね。大好きです。
phpMyAdminのインストール

MySQL の再起動

my.cnf を書き換えた場合は再起動が必要です。結果的に今回は書き換える必要はなかったのですが、私はいろいろ弄っていたので。以下のページが参考になりましたので紹介とともに引用します。
Mac portsで入れたMySQLを再起動する方法 – [サ]ロンパスの日記

1
2
$ sudo launchctl stop org.macports.mysql5
$ sudo launchctl start org.macports.mysql5

その他の参考にしたサイト

ITO の メモ書き | RedhatES4.0 + phpMyAdmin-3.3.3 インストール
データベースの管理 | MySQL講座 [Smart]
MacPortsでMySQLをインストール — BONNOH FRACTION 13

MySQL でテーブルにレコードが存在するかチェックする方法

検索してもなかなか出てこなく、困っていました。
MySQL とかあまり詳しくないのでこれで良いのか分かりませんが。

1
SELECT COUNT(*) FROM tablename WHERE id = 123456;

これで返ってきた値が 0 であれば存在しない、0 以外であれば存在したとして判断します。
ちなみに COUNT 関数はパフォーマンス落ちるかもそうです。

たぶんもっと良い方法がありそうですが…。また時間のある時に探してみることとします。

  • Date: 2010-6-18 (金) 16:14:55
  • Category: MySQL
  • Tags:

MySQL の LIKE 演算子で濁音・半濁音を区別して検索する方法

GW を楽しく制作に費やしています。どんどん知識が溜まり、どんどん笑顔になります。楽しくてたまりません!これだけのためにニートに戻りたいと本気で思ってしまいますね。

LIKE 演算子で以下のようにやると濁音や半濁音が区別されません。

1
SELECT * FROM `calorie_datas` WHERE '1' = '2' or name LIKE '%パン%''

これで、カレーパンやメンチカツパンを抽出できるように思えますが、チャーハンまで引っかかってしまうんですねー。

対策としては以下がとても参考になりました。
LIKE で清音と濁音・半濁音を区別する – 教えて!goo
BINARY にしてやると良いみたいですね。

1
SELECT * FROM `calorie_datas` WHERE '1' = '2' or name LIKE BINARY '%パン%''

チャーハンが引っかからなくなりましたね!
SQL をしっかり使えば、PHP で無駄な処理をすることなく、求めているデータを直に高速に抜き出すことができますが、中々頻繁に使うものでもないので勉強がおろそかになりがちですね。

CakePHP で MySQL で文字化けする場合の解決方法

CakePHP で ???????? って文字化けするときは SET NAMES utf8 とすると良いです。

1
mysql_query("SET NAMES utf8");

しかし CakePHP ではもっと簡単に設定する方法があります。
CakePHP MySQL で文字化けを防ぐ設定 | Sun Limited Mt.

database.php で ‘encoding’ => ‘utf8′ とすれば良いみたいです。

1
2
3
4
5
6
7
8
9
10
var $default = array(
    'driver' => 'mysql',
    'connect' => 'mysql_connect',
    'host' => 'localhost',
    'login' => 'user',
    'password' => 'password',
    'database' => 'dbname',
    'prefix' => '',
    'encoding' => 'utf8'
);

CakePHP 楽ですね。早く使いこなせるようになりたいものです。

MySQL のフィールド名に使ってはいけない予約語

MySQL のフィールド名にはできるだけかっこいい名前を付けたいものですね。私としては記事の更新日を格納するフィールド名を UPDATE としたかったのですが、エラーで書き込みすらできませんでした。

というわけで MySQL の予約語を覚えて起きましょう。
MySQL 5.1 リファレンスマニュアル :: 8.3 MySQLでの予約語の扱い

ちなみに以下のページの「ひっかかりやすいワード25選」は秀逸です!
MySQLで使ってはいけないワード一覧 – Knowledge Database IT

ちなみに、フィールド名やテーブル名は ` で区切ればなんとかいけます。

1
insert into `tlis_list` (member_id, title, date, `update`, state) values ('sorai', 'てすと', '2010-02-14 02:11:06', '2010-02-14 02:11:06', 0)

でもできるだけ予約語は避けたいですね。

  • Date: 2010-2-14 (日) 2:13:05
  • Category: MySQL
  • Tags:

PHP と MySQL でテーブルの行数を調べる方法

PHP と MySQL でテーブルの行数を調べるには以下のようにします。

1
2
3
4
$sql = 'select count(*) as cnt from テーブル名';
$res = mysql_query($sql);
$row = mysql_fetch_assoc($res);
echo $row['cnt'];

テーブル名のところに調べたいテーブル名を入れてください。
関数にしちゃうと便利かもしれませんね。

1
2
3
4
5
6
function table_col($str) {
	$sql = 'select count(*) as cnt from '.$str;
	$res = mysql_query($sql);
	$row = mysql_fetch_assoc($res);
	return $row['cnt'];
}

引数にテーブル名を入れれば行数が返ってきますね。便利ですね!

PHP で MySQL のデータを扱う際に良く使う SQL とかその辺

この世の中は私には生きにくいな、人と関わるのは本当に難しいし辛いな、Web だけやっていたいな、と思う今日この頃です。

それと同じで MySQL も便利なんですが、接続するのが億劫です。でも最近ある程度やることが決まってきたので、ここで一部メモしておきます。

データベースに接続する

あ、ちなみにこれから紹介するコードなどは既にデータベースとの接続が済ましてあることが前提です…。基本的なことなので私が説明する必要はないと思いますが、とりあえず書いておきます。

1
2
3
4
5
6
7
8
9
10
$db_user = 'username';
$db_name = 'dbname';
$db_host = 'localhost';
$db_pass = 'password';
 
$db = mysql_connect($db_host, $db_user, $db_pass);
mysql_select_db($db_name);
mysql_query("SET NAMES utf8");
mb_internal_encoding('UTF-8');
mb_regex_encoding('UTF-8');

条件に合致するデータがデータベースの中にあるか調べる

会員の住所から東京都に住んでいる人が存在しているか確認する場合。ちなみにテーブル名は member で、住所のフィールド名は address の場合で。

1
2
3
4
5
6
7
$sql = "select * from member where address = '東京都'";
$result = mysql_query($sql);
if(mysql_num_rows($result)>0) {
	echo '既存のデータです。';
} else {
	echo 'データがありません。';
}

この際、ついでに東京都の人の名前を全部一覧化したい場合はそのまま続けて以下のように書けば良いです。ちなみに名前が入っているフィールド名は name で。

1
2
3
while ($value = mysql_fetch_assoc($result)) {
	echo $value['name']."<br />\n";
}

ある会員 id の情報をごそっと抜き出す方法

先ほどは条件にマッチするデータを一覧化していましたが、今回は id にマッチする行をごっそり抜き出し連想配列にします。
今回は会員 id が 14578 の人の名前と住所とメールアドレスを出力する場合。

1
2
3
4
5
6
7
8
9
10
11
$sql = "select * from member where id = '14578'";
$result = mysql_query($sql);
$member = mysql_fetch_array($result);
 
if(isset($member)) {
	echo $member['name']."<br />\n";
	echo $member['address']."<br />\n";
	echo $member['email']."<br />\n";
} else {
	echo 'データがありません。';
}

データベースにデータを追加する場合

次はデータを追加する場合。今回は id が 10 で name がナギのデータを member というテーブルに挿入します。これは簡単です。

1
2
$sql = "insert into member (id, name) values (10, 'ナギ')";
$result = mysql_query($sql);

データベースの指定した行を上書きする

会員 id が 78964 の行の name をナギに変更する場合は次のようにします。

1
2
$sql = "UPDATE member set name = 'ナギ' where id = 78964";
$result = mysql_query($sql);

[MySQL] AUTO_INCREMENT をリセットする方法

以下でリセットすることが可能です。

1
 ALTER TABLE [table_name] AUTO_INCREMENT=0;

レコードを削除しても AUTO_INCREMENT は穴埋めみたいなことしません。一度振った数字はもう振らないんですね。
これの良いところは、一生変わらない ID とか、単純に一度誰かが使った ID(数字) などを使わないようにするために使えそうです。なんか、意味不明ですね。

WordPress(MySQL) 記事内の URL などを一括で書きかえる方法

なんでもかんでも記事内に絶対パスを使う人はたくさんいる。そんな人のサイトの URL が変更になったときとか、全部の記事にアクセスして URL を手作業で書き変えなきゃいけないから大変だ…と思うんじゃなくて、抜け道は必ずあるので、それを実行する。

phpmyadmin などにアクセスできるのなら、SQL ってところから以下を実行していただければ、一瞬ですべてのファイルの任意の文字列を好きなように変更できる。

1
UPDATE テーブル名 SET post_content = replace(post_content, '対象の文字列', '置き換えたい文字列');

テーブル名は大体が wp_posts みたいな感じになると思うけど、インストールの時点で接頭語を変えていたり、ひとつのデータベースでいくつもの WordPress をインストールしているような人は、この辺要注意ですね。