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でいいのかってちょっと不安になる。

そんなときに便利なのがあった。

CakePHP 規約ワードメーカー

よく使うであろう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の生成に成功した。

プロフィール

  • 1983年生まれ。
    C++、PHP、JavaScript、ActionScriptで何か作ってます。

技術書

Effective C++ 原著第3版 (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)
C++ Coding Standards―101のルール、ガイドライン、ベストプラクティス (C++ in‐depth series)
JavaScript 第5版
まるごとJavaScript & Ajax ! Vol.1
CakePHPガイドブック
CakePHP ポケットリファレンス (Pocket Reference)
Powered by Movable Type 4.01

このアーカイブについて

このページには、2008年4月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2008年3月です。

次のアーカイブは2008年5月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

2008年10月

      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

リンク