Archive for the ‘MySQL’ Category

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 さん、とても勉強になりました!

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 で無駄な処理をすることなく、求めているデータを直に高速に抜き出すことができますが、中々頻繁に使うものでもないので勉強がおろそかになりがちですね。

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(数字) などを使わないようにするために使えそうです。なんか、意味不明ですね。

MySQL でテーブル名を変更する方法

MySQL でテーブル名を変更する場合は以下で変更することが可能です。old name に現在のテーブル名を、new name に変更後のテーブル名を入力して実行してください。

1
ALTER TABLE old name RENAME TO new name;
  • Date: 2009-8-02 (日) 16:33:18
  • Category: MySQL
  • Tags:

XAMPP の MySQL の root ユーザーのパスワードを変更する方法

XAMPP はインストールしてそのままの状態だと MySQL の root ユーザーにパスワードがありません。これを変更するには phpmyadmin の特権から変更することが可能ですが、ただ変更するだけでは phpmyadmin にアクセスすることができなくなります。

変更した場合は、config.inc.php でパスワードを設定する必要があるみたいです。
どのようにMySQLのrootユーザのパスワードを変更するのですか?(方法1) > apache friends – xampp windows版faq

C://xampp/phpmyadmin/config.inc.php にある、以下の password の部分を変更します。

1
2
3
4
5
/* Authentication type and info */
$cfg['Servers'][$i]['auth_type'] = 'config';
$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = 'password';
$cfg['Servers'][$i]['AllowNoPasswordRoot'] = true;

border-collapse で collapse を 指定すれば border が重なり合う

ただ普通にテーブルを使うと、影のついた変な線が出てくると思います。
これをそのまま使うのはあまり良くないので、table に cellspacing=”1″ して背景色を枠線に見せるのも良いんですが、枠線はやっぱり border で出したい。でも border で枠線を出すと、隣のセルと枠線が重なり合って、枠線が2pxになっちゃうので使えないと思っていたのですが、CSS で border-collapse で collapse を指定すれば、枠線が重なりあって2pxから1pxになってくれるみたいです。メモメモ。
border-collapse-スタイルシートリファレンス

Page 1 of 212