2008年4月アーカイブ
コンストラクタでメンバ変数を初期化する際には、代入じゃなくて、初期化リストを使う。
/**
* CSampleクラス
*
* @date 2008/04/30
*/
class CSample
{
int _nTest;
int* _pnTest;
…
}
こんなメンバ変数持ったクラスだったら、初期化リスト使った初期化はこうなる。
/**
* コンストラクタ
*/
CSample::CSample():
_nTest(0),
_pnTest(NULL)
{
}
で、メンバ変数が配列とか構造体のときは、どうすんのかと思って調べたけど、見つからなかった。試しに次のメンバ変数を初期化リストに入れてデバッグしてみた。
/**
* CSampleクラス
*
* @date 2008/04/30
*/
class CSample
{
int _arynTest[100]; ←配列
ST_TEST _stTest; ←構造体
…
}
初期値を引数に入れようとするとエラーになったから、空にしてビルドした。
/**
* コンストラクタ
*/
CSample::CSample():
_arynTest(),
_stTest()
{
}
で、このとき構造体"_stTest"は0埋めされてたから、とりあえず構造体は0で初期化されるっぽい。ただ配列"_arynTest"は0埋めとかされてなかった。この方法だと配列は初期化できないみたい。
配列のメンバ変数の初期化は、普通に{}内で、memsetとか使うしかないか。
CakePHPでWebアプリ作り。ということで、まず必要なのは、DB構成かな。
で、DB設計と思ったけど、、、
…できない。
DBがらみの仕事やったことないからな。そりゃまともな設計できないな。
そんな低いレベルからスタートかー。
CakePHPの前に、データベースというものの勉強を始めたいと思います。
CakePHPの規約で、モデルのクラス名は英語の単数形、テーブル名は複数形とかってあるけど、じゃあ、Fishは本当にFishでいいのかってちょっと不安になる。
そんなときに便利なのがあった。
よく使うであろうMySQLコマンドのまとめ。
- MySQLへの接続
mysql -u ユーザ名 -D DB名 -p
または、
mysql --user=ユーザ名 --password=パスワード DB名
例)mysql -u root -p
例)mysql --user sample_user --password=sample_password
- MySQLから切断
exit
- DBの作成
mysql> create database DB名;
例)mysql> create database sample_db;
- DBの一覧表示
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| sample_db |
| test |
+--------------------+
- DBの削除
mysql> drop database DB名;
例)mysql> drop database sample_db;
- DBの選択
mysql> use DB名;
例)mysql> use sample_db;
- テーブルの作成
mysql> create table テーブル名 (カラム情報);
例)mysql> create table sample_table (id int(5) primary key not null, name varchar(30) not null, state varchar(20));※この例で作成したカラムは、id、name、state
- テーブル情報の表示
mysql> desc テーブル名;
例)mysql> desc sample_table;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(5) | NO | PRI | | |
| name | varchar(30) | NO | | | |
| state | varchar(20) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
- テーブルの削除
mysql> drop table テーブル名;
例)mysql> drop table sample_table;
- テーブルの変更
- カラムの追加
mysql> alter table テーブル名 add カラム名 型;
例)mysql> alter table sample_table add state varchar(20);
- カラムの削除
mysql> alter table テーブル名 drop カラム名;
例)mysql> alter table sample_table drop state;
- カラムの型変更
mysql> alter table テーブル名 modify カラム名 型;
例)mysql> alter table sample_table modify name varchar(40) not null;
- データの挿入
mysql> insert into テーブル名 values (値);
例)mysql> insert into sample_table values (1, 'george', 'wait');
例)mysql> insert into sample_table values (5, 'pete', 'wait');
- データの削除
mysql> delete from テーブル名 条件;
例)mysql> delete from sample_table where id = 5;
- データの変更
mysql> update テーブル名 set カラム名 = データ 条件, カラム名 = データ 条件, …;
例)mysql> update sample_table set state = 'wait';
→全てのstateを'wait'へ
例)mysql> update sample_table set state = 'running' where id = 1;
→id=1のstateを'running'へ
- データの抽出
mysql> select カラム名 from テーブル名;
例)mysql> select * from sample_table;+----+--------+---------+
| id | name | state |
+----+--------+---------+
| 1 | george | running |
| 2 | ringo | wait |
| 3 | paul | wait |
| 4 | john | wait |
+----+--------+---------+
- ユーザ権限の追加
mysql> grant all privileges on DB名.テーブル名 to ユーザ名@ホスト名 identified by 'パスワード' with grant option;
※ホスト名の設定は以下の通り
@localhost :ローカルホストから接続できる
@'%' :全てのホストから接続できる
@ホスト名 :指定ホストから接続できる例)mysql> grant all privileges on *.* to sample_user@'%' identified by 'sample_password' with grant option;
例)mysql> grant all privileges on *.* to sample_user@localhost identified by 'sample_password' with grant option;
「CakePHPガイドブック」に書いてある通りに、bake.phpでModel、View、Controllerのコードを自動生成してみた。
で、Viewを生成したときに、エラーが発生した。
PHP Warning: Invalid argument supplied for foreach() in C:\Apache2\htdocs\cake\
cake\libs\controller\controller.php on line 666
…
どうやら、今使ってるCakePHPのバージョンcake_1.1.19.6305に問題があるらしい。
cake_1.1.19.6305でエラー Warning bake.php on line 910 - 渋谷生活
バージョンをcake_1.1.18.5850にしたら、Viewの生成に成功した。






