ラベル mysql の投稿を表示しています。 すべての投稿を表示
ラベル mysql の投稿を表示しています。 すべての投稿を表示

2011/03/11

CentOSにsymfonyをインストール

訓練記録 3/11

・掃除は今日も花粉症でお休みでした。

<1時間目>
・firewallの設定(iptables)
今回は開発環境の設定なので、本番環境とは異なることを認識して下さい。
デフォルトでは、ファイアーウォールの設定がされていますが、これをとめます。
内容はテキストどおり、保存したらサーバ再起動
/etc/sysconfig/selinux
SELINUX=enforcing

SELINUX=disabled

getenforce コマンドでdisabledを確認


iptables -P INPUT ACCEPT
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

#ルールクリア
iptables -F

#icmp(ping) と自端末からの入力を許可
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT

#Web、FTP、POP、smtp による接続を許可
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 110 -j ACCEPT
iptables -A INPUT -p tcp --dport 25 -j ACCEPT

#ssh による接続を許可
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

#TCP の接続開始と応答、FTP データなどを許可
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#ルールをセーブする
/etc/init.d/iptables save

cat /etc/sysconfig/iptables

# vi /etc/sysconfig/iptables
#INPUTがDROPになっていたら修正
:INPUT DROP [0:0]

:INPUT ACCEPT [0:0]


<2時間目>
・Apacheのインストール
テキストのとおり
yumは、ソフトをインストールするためのコマンド
オプションの-y は、インストールの問い合わせに対して「y」と回答する
・Apacheの設定
/etc/init.d/httpd start
/etc/init.d/httpd restart
httpdのデーモン起動確認のコマンド
> ps -ef | grep httpd
PCからfirefoxで、ipアドレスを指定してapacheの画面が出ればOK

・mysqlのインストールと設定
/etc/init.d/mysqld start
デーモン確認のコマンド
> ps -ef | grep mysqld

・phpのインストール
時間がないので、午後

・vsftpdのインストール
ffftpで接続確認、サーバはCentOS(VMware)、ユーザは作った一般ユーザ
# /etc/init.d/vsftpd start
デーモン確認のコマンド
#ps -ef | grep vsftpd

<3時間目>
・ffftpでftpサーバへの接続確認
PCからffftpで、ipアドレスを指定して一般ユーザでログインが出きればOK

・phpインストール(今回)は、symfony 1.0.20をインストールするためphpは5.2)
PHP 5.2.16
# php -v

・pearをインストール
・symfonyをインストール、確認
# symfony -V
インストールモジュール確認

# pear list


・環境を落とす
vmware,ptty,ffftp

・vmwareからcentOSを一度削除して再度インストール作業

<4時間目>
・vmwareからcentOSを一度削除して再度インストール作業、続き

<5時間目>
・phpinfo()でphp動作を確認
mysqlのユーザを追加しようとして、エラーとなる
flush privileges;
ERROR 1146 (42S02): Table 'mysql.servers' doesn't exist
対応は、リンク先を参照した。

・今日は地震で電車が止まって帰れない。

2011/03/03

smarty講習

php講習 3/3

・掃除は花粉症でお休みしました。
今日は目が異常にかゆい。

<1時間目>

<2時間目>
・smartyでfizzbuzz、続き
 出来ない人は16時半以降続きを。。。
・smartyで、smartyクラスの継承
デリミタの変更
(デリミタ「{」「}」はjavascriptと競合する可能性があるので、そのままで使うことは
あまりないとのこと)
<3時間目>
・mysqlで環境設定
 DB作成
 Table作成
・DBのtableからデータを取得(今までの復習)
・配列変数でのデータ取得
・テーブルの行データ取得を2次元配列で扱う
行データは連想配列に入っているので、smartyでは、「.」(ドット)+「カラム名」で参照する。

<4時間目>
・smarty課題の練習

<5時間目>
・smarty課題の練習、続き

<6時間目>
・smartyでlogin.phpとlogin.tplに分ける
phpの課題でもやっていた、phpとhtmlのタグを分ける作業の延長

「|escape」に関連し、default_modifiersのURL紹介があったので少し調べました。
この関数default_modifiersはなかなか曲者のようで、別の記事もありました。

Smartyのバグ ~default_modifiers~
Webでよく調べたらもっと出るのかもしれないし、
3.0.6になって改善されているかもしれない。

☆追記、escapeの除外方法
smarty 2では、{$body|smarty:nodefaults}だったが、
smarty 3では、{$body nofilter}に変わったようです。
日本語版マニュアルはまだですが、英語版には反映されています。

2011/01/25

php掲示板、インクルードの機能

php講習 1/25

・掃除は昨日に引き続き東浜でした。

<1時間目>
・九九の表をテーブルタグを使ってプログラムにする。
 今日は、出来きてもメールで送付する必要はないそうです。

<2時間目>
・掲示板、パスワードチェックして削除する処理の続き
 引き続きプログラムが出来ていない人は続けて下さい。
・削除にパスワードチェックを入れたので、それ以前に入力してある
 テストデータは、パスワードがないので削除出来なくなった。
 sql文でパスワードを仮に設定してテスト。

<3時間目>
・処理の追加が出来ていない人は引き続き作業
・処理の追加が終わった人は、機能を関数にすることを検討。
・delete.php,delete_submit.phpの答え合わせ
・これをもとにreply_delete.php,reply_delete_submit.phpを修正する。
・以上で掲示板の削除についての拡張作業は終了です。

<4時間目>
<機能を外だしにするための事前知識>
・BBSプロジェクトに「test」フォルダを追加作成する。
・以下のphpファイルを空で作成する。
  include.php
  test1.php,test2.php,test3.php,test4.php,test5.php,test6.php
各ファイルには、プログラムのコメントを入れておくこと。
各テストファイルから、include.phpを呼び、include.phpで設定した項目がテストファイルで参照可能なことを確認する。

<5時間目>
・include.php
# データベース接続時に必要な各項目
$url  = "localhost" ;
$user = "xxxx" ;
$pass = "yyyy" ;
# おまけ
$message = "これはinclude.phpから読まれています。" ;

・test1.php
require './include.php';
print $message;

・掲示板について、定数とインクルードの機能を試す。
bbsの下にinclude.phpを作成。
・ログイン設定をinclude.phpで記述
# データベース接続時に必要な各項目の定数
define("DB_URL" , "localhost") ;     //  接続先
define("DB_USR" , "xxx") ;          //  ユーザ名
define("DB_PASS", "yyyy") ;          //  パスワード
define("DB_USE" , "study") ;         //  選択DB名

//mysql に接続する
$db = mysql_connect(DB_URL,DB_USR,DB_PASS) or die(mysql_error());
// データベースを選択する
$sdb = mysql_select_db(DB_USE) or die(mysql_error());

<6時間目>
・ログイン設定のある掲示板の各プログラムから、include.phpを呼ぶように変更
 

2011/01/07

php掲示板作成

php講習 1/7
・今日の清掃は、東浜でした。(名前が付いているなんて知らなかった)

<1時間目>
・昨日の復習
フォームタグのpostメソッドとgetメソッド
$_requestだとどちらのメソッドで送信したものでもphp側で受けられる。
「print_r($_request) ;」で内容を確認可能。

・昨日はさくらエディタでhtmlファイルを編集していたが、今日eclipseで開けたら文字化けしていた。
文字コードはutf8にしていたが、sjisに戻したら表示された。
しかし、FireFox側で、受けるphpの表示が文字化けする。
とりあえず、htmpファイルをeclipseから見るのはあきらめて、設定を戻した。
文字化け対応はいろいろありますが、どれも一長一短

<2時間目>
・引き続きフォームの練習
受け取ったphp側に入力チェックを入れる。
もし未入力の場合、メッセージを出力する。(if文)
・phpプログラムを修正したとき、FireFoxでctrl+Rでリフレッシュできるの知らなかった。
毎回メニューから更新を選択してました。

<3時間目>
・eclipseの使い方復習
プロジェクトbbsを新規に作成
・課題(掲示板作成)の説明
最初にmysqlで今回使用するcommentとreplyテーブルを作成
create table comment
create table reply
作ったらテーブルの構成を確認
desc  comment ;
show create table comment ;
・課題のテキストにしたがい、ファイルを作成
内容をコピーしていく。

<4時間目>
・課題のテキストにしたがい、内容をコピーしていく、続き。
 追加の処理を間に入れ、インデントをして見やすくする。
・インデントをeclipsでやる方法
 対象の行を選択し、「TAB」キーを押す、「shift」+「TAB」で戻す。
・ソースの追加が終了したら、index.phpで
 サンプルのDB名、ユーザID、パスワードを自分の環境に合わせる。
・エラーチェックの確認
 index.phpのエラーチェックがうまくいったら、投稿してみる。
 投稿したらmysqlクライアントから、テーブルの内容を確認
  select * from comment;
 投稿の内容が大きいと画面の表示が崩れてしまう。そのときは、縦に表示する。
  select * from comment\G
 index.phpに処理を追加
・Firebugでレイアウトを確認
・返信(reply.php)の処理追加

<5時間目>
・返信(reply.php)の処理
追加後の確認作業
・今後の作業のため、投稿してデータを5件くらい作っておく。 
・これからは、プログラムには、先頭にコメントを入れる。
・eclipseのソース
タイトルをダブルクリックすると、全画面表示
2つのプログラムの比較をするとき、タイトルを下にドラックすると2画面分割表示になる。
色々やりすぎて、画面が戻せなくなったら、パースペクティブのリセット
アウトラインの変数名をダブルクリックすると、使っている部分の色が変わる。

・今日やったところを復習、整理
・掲示板の残りは火曜日
1/11は午前中2時間のみらしい

2010/12/25

mysqlのテーブル内容確認方法

mysqlでテーブルに設定された内容の確認方法

> desc member;
> show create table member;
> show columns from member;
mysql> desc member;
+---------+---------+------+-----+---------+----------------+
| Field   | Type    | Null | Key | Default | Extra          |
+---------+---------+------+-----+---------+----------------+
| id      | int(11) | NO   | PRI | NULL    | auto_increment |
| name    | text    | YES  |     | NULL    |                |
| age     | int(11) | YES  |     | NULL    |                |
| address | text    | YES  |     | NULL    |                |
+---------+---------+------+-----+---------+----------------+
4 rows in set (0.01 sec)
mysql> show columns from member;
+---------+---------+------+-----+---------+----------------+
| Field   | Type    | Null | Key | Default | Extra          |
+---------+---------+------+-----+---------+----------------+
| id      | int(11) | NO   | PRI | NULL    | auto_increment |
| name    | text    | YES  |     | NULL    |                |
| age     | int(11) | YES  |     | NULL    |                |
| address | text    | YES  |     | NULL    |                |
+---------+---------+------+-----+---------+----------------+
4 rows in set (0.01 sec)
mysql> show create table member;
+--------+----------------------------------------------------------------------
-------------------------------------------------------+
| Table  | Create Table

                                                       |
+--------+----------------------------------------------------------------------
-------------------------------------------------------+
| member | CREATE TABLE `member` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` text,
  `age` int(11) DEFAULT NULL,
  `address` text,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 |
+--------+----------------------------------------------------------------------
-------------------------------------------------------+
1 row in set (0.00 sec)

2010/12/24

mysqlが起動できない

xampp環境で、mysqlクライアントがwindowsのコマンドラインから起動できないとき

<状況>
C:\Users\user>mysql
'mysql' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

<原因>
ユーザの環境変数のpathが通っていないため、mysql.exeを見つけられず
mysqlコマンドを実行できません。

<対応>
mysqlコマンドの場所をpathに追加する必要があります。

<調査>
・まずmysqlコマンドの場所を探します。
私のPCのpleiadesのxampp環境では、以下のパスでした。
P:\pleiades\xampp\mysql\bin\mysql.exe
・変更前の設定を確認します。
> set
表示された内容から、「Path=」の行を控えます。

<設定>
pathの設定を変更するため、環境変数を変更します。
システムのプロパティから、詳細設定タブの「環境変数」を開きます。
システム環境変数で「Path」を編集で開きます。
変数値の項目の最後に、「;」(セミコロン)とmysqlのパスを追加します。
追加する内容  ;P:\pleiades\xampp\mysql\bin\

・変更後の設定を確認します。
> set
表示された内容から、「Path=」にmysqlのパスが追加されていることを確認します。

2010/12/23

mysqlの操作とphpからmysqlを呼び出す方法

php講習 12/23

・今日の清掃は昨日と同様に海岸側を歩きました。
天気が良かったせいか、人が多かった。

・コマンドラインからmysqlを起動し、日本語入力できるように設定。
> SET NAMES sjis;

・日本語が入力できるようになったので、日本語データを入れてみます。
> insert into address (name, kana,address1,address2,tel,update_) values ("織田 信長", 'オダノブナガ',"愛知","名古屋市中区","054-222-6000","2010/12/23");

・テーブルの追加
部署テーブル
    ID(主キー)
    部署名
    更新日
> create table unit (id int not null auto_increment,
    unit_name text,
    update_ date,
    primary key (id));

役職テーブル
    ID(主キー)
    役職名
    更新日 
> create table post (id int not null auto_increment,
    post_ text,
    update_ date,
    primary key (id));

mysqlの予約語と重なるとカラム名がエラーになる?
> mysql> create table unit (id int not null auto_increment,
> -> unit_name text,
> -> update date,
> -> primary key (id));
> ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your
> MySQL server version for the right syntax to use near 'update date,
> primary key (id))' at line 3

・部署テーブルのデータ作成
テキストエディタでinsert文をまとめて「busyo.sql」で保存、ファイルを実行する。
mysqlが見つけられるように、ファイルを置く場所(フォルダ)は、mysqlクライアントを起動したフォルダです。
> source busyo.sql;
但し、このときファイルはsjisで保存しておく。
phpのファイル用にutf8にすると文字化けする。

・コマンド実行パスの設定
環境変数pathにmysqlのパスを追加する。

・テーブル結合のためのデータ準備
show columns from address;
show columns from post;
show columns from unit;
まず、アドレス帳に部署IDと役職IDを追加する。
> alter table address add post_id int;
> alter table address add unit_id int;
次にIDを設定する。
update address set post_id=1,unit_id=1 where number=1;

・テーブルの結合
(select * from address,unit where address.unit_id=unit.id ;)
select  
    address.number,
    address.name,
    address.unit_id,
    unit.unit_name 
from      address,unit 
where      address.unit_id=unit.id  ;
・省略形での記述
select 
    ta.number,
    ta.name,
    ta.unit_id,
    tb.unit_name
from      address ta,unit tb
where      ta.unit_id=tb.id ;

・役職テーブルを結合する。
select  
    address.number,
    address.name,
    address.unit_id,
    address.post_id,
    unit.unit_name, 
    post.post_
from      address,unit,post 
where      address.unit_id=unit.id  and address.post_id = post.id ;
同様に省略形
select  
    ta.number,
    ta.name,
    ta.unit_id,
    ta.post_id,
    tb.unit_name, 
    tc.post_
from      address ta,unit tb,post tc 
where      ta.unit_id=tb.id  and ta.post_id = tc.id ;

・テーブルの確認
desc テーブル名
show create table テーブル名

・PHPからmysqlに接続する。
//mysql に接続する
$db = mysql_connect('localhost','user','pass');

// データベースを選択する
$sdb = mysql_select_db('study');

// クエリを送信する
$sql = "select * from address ;";

$result = mysql_query($sql);

// 結果の取得
print "<pre>" ;
while ($row = mysql_fetch_array($result)){
    print_r ($row);
}
print "</pre>" ;
・実行結果
Array
(
    [0] => 5
    [number] => 5
    [1] => 織田 信長
    [name] => 織田 信長
    [2] => オダノブナガ
    [kana] => オダノブナガ
    [3] => 愛知
    [address1] => 愛知
    [4] => 名古屋市中区
    [address2] => 名古屋市中区
    [5] => 054-222-6000
    [tel] => 054-222-6000
    [6] => 2010-12-23
    [update_] => 2010-12-23
    [7] => 
    [post_id] => 
    [8] => 
    [unit_id] => 
)


明日以降の予定
  • phpからsql文でアクセスした結果を見やすくする。
  • サンプルのデータを作る。(データ件数を多くする予定)
  • データが多い場合のパフォーマンス測定方法などを紹介。

2010/12/22

MySQL

php講習 12/22

・恒例の朝の清掃は、海岸を歩きました。

・windowsのコマンドプロンプトからmysqlクライアントを使ってコマンドの実行、まずrootユーザでmySQLに接続。
> mysql -u root

・dbの一覧を表示
> show databases;

・dbを作成
> create database study;
作成したdbをdbの一覧で確認。

ユーザ作成
> GRANT ALL ON *.* TO user@"localhost" IDENTIFIED BY "pass";
> flush privileges;

・一度mysqlクライアントを出てから、新しく作ったユーザでログイン
> quit
> mysql -u user -p
Enter password:xxx (パスワード入力)
> status

・先ほど作ったデータベースにテーブルを作成
> use study;
・テーブルがないことを確認
> show tables;

・テーブル作成
> create table member (id int not null auto_increment,
name text,
age int,
primary key (id));

・テーブル作成結果の確認
> show tables;
> desc member;
> show columns from member;

・いままで実行したコマンドの復習
> quit
> mysql -u user -p
> show databases;
> use study;
データベースを指定したあとであれば、テーブルの情報が取得出来る。
> show tables;

・テーブルにデータを作成(挿入)
> insert into member (name, age) values ('user', '33');
> insert into member (name, age) values ('', '');
> insert into member ( age) values ( "" );
* 3件目に作成したレコードで、nameはnullになっています。空の文字列とnullは異なります。

・テーブルのデータ表示
> SELECT name, age FROM member;

・昨日の資料を参照して、dbの基本構造から説明
・sqlは「データ制御言語」「データ操作言語」「データ定義言語」

・練習 ID=1の人のデータを表示
SELECT * FROM member WHERE id=1;
SELECT * FROM member WHERE id=1 or id=2;
SELECT * FROM member WHERE id<=2; SELECT * FROM member WHERE id != 1 ;
SELECT * FROM member WHERE name is null ;
・データの参照方法
> SELECT * FROM member order by name asc;

・データの更新
> update member set age=19 where id=1;
> update member set name="name" where name is null ;
> update member set name="name_aaa" where name = "" ;

・データの削除
> delete from member where id=3;

・テーブルにカラムを追加
> alter table member add address text;

・追加した項目にデータを設定
> update member set address="adr1" where id=1 ;

・練習
(1)create文を作成してみましょう。
> create table address (number int not null auto_increment,
name text,
kana text,
address1 text,
address2 text,
tel text,
primary key (number));

> show columns from address;

(2)各カラムのデータ型を考えて見ましょう。
> alter table address add update_ date;

(3)insertするデータを作成して見ましょう。
insert into address (name, kana,address1,address2,tel,update_) values ('oda', 'odanobunaga',"aichi","nagoya","054-222","2010/12/22");
insert into address (name, kana,address1,address2,tel,update_) values ("小田", 'odanobunaga',"aichi","nagoya","054-222","2010/12/22");
文字コード設定が実施されていないと、日本語は文字化けします。
日本語入力について、コマンドライン上からは文字コードの指定を改めて実施する必要がありそうです。
日本語設定の参考

このなかのコマンドを実行したあとは、日本語が表示されました。
なお、クライアント上の設定なので、mysqlを起動するたびに実行する必要があると思われます。

SET NAMES sjis

・my.iniとかの設定を疑いましたが関係なかった?


明日以降の予定

<今日の続き>
mysqlクライアントの日本語表示がうまくいかないところは調べておきます。
データのアクセスでクライアントから日本語がうまくいかないときは別の方法を検討します。
<資料5>
SQL文をPHPからアクセスする。
<資料6>
インポート/エクスポート
xamppで使えるphpmyadminの説明

2010/12/21

クラスとMySQL

php講習 12/21
・php実習

午前中は、練習問題3 p.12
私は、ハローワークに行ったのでお休みしました。

昼食後、練習問題3の解説
練習4、5は飛ばした。

・クラスの継承
スーパークラス(親のクラス)
サブクラス(子のクラス)

・オーバーライド
スーパークラスで定義されているメソッドを、子クラスで再定義。
シンフォニーをさわるとき、出てくる。
Symfony Framework
Webアプリケーションの開発速度を向上させ、メンテナンス量を軽減することを目的に開発されたPHP5で動作するフレームワーク。

明日以降の授業資料(mysql)が送付された。

・理解度テスト
PHPプログラム作成

・データベース(mySQL)の環境
テーブルは、例えばexcelのシートと同じ
excelの、列はカラムと言いましょう、また行はレコードと言いましょう。
データベースでは、型を意識してデータを扱うので、異なる型に値を入れようとすると
エラーになります。
(PHPでは、自動的に変換してくれるので型を意識することがあまりありません)

データ型とその種類
データベース名、テーブル名、カラム名には日本語は使わない。
プライマリキーについて
テーブルのなかでユニークにレコードが特定出来るキー
nullは設定できない。(データが特定できないため)
データがnullのとき
カラムが空のデータのこと
ロック(排他制御)について

SQLのルール
4種類のデータ操作言語 CRUD
create : 作成
read   : 読み出し
update : 更新
delete : 削除


mySQLの初期設定ファイル変更
my.iniに文字コードの日本語設定を追加。
phpMyAdmin や MySQL コマンドライン・クライアントで、日本語のテーブル名を使うための設定
キャラクタセットに関する設定の「文字コードをutf8に」の部分を参照して下さい。

設定が終わったら一度xamppを落とす。
「mysql_start.bat」実行
設定変更がうまく反映されていないようなので、PCを再起動