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文でアクセスした結果を見やすくする。
  • サンプルのデータを作る。(データ件数を多くする予定)
  • データが多い場合のパフォーマンス測定方法などを紹介。

0 件のコメント:

コメントを投稿