少し進んだ。一通りのことはできたかなと。慣れてくればMySQLと同じように扱えそう。
●create
これは、「pgAdmin」ツールでやった方が面倒ない。idなどのオートインクレメント型指定が簡単にできる。使い込めば中々いいツールになるかもしれない。
そうそう、既存内容の編集はフリーの「A5:SQL」。GUIのデザインはあか抜けないけど便利そうだ。
●index.html
<html> <head><title>PostgresSQL</title></head> <body> <p><a href ="show.php">表示</a></p> <p><a href ="add.html">追加</a></p> </body> </html>
●show.php
<html> <head><title>PHP TEST</title></head> <body> <p><a href="index.html">メニュー</a></p> <?php $conn = "host=localhost dbname=postgres user=postgres password=postgres"; $link = pg_connect($conn); if (!$link) { die('接続失敗です'.pg_last_error()); } //SQLの実行 $result = pg_query($link, "SELECT * FROM staff order by Id desc"); //データの取得 $arr = pg_fetch_all($result); echo "<table border='1' cellspacing='0' cellpading ='8' >"; $flds = pg_num_fields($result); echo "<tr>"; for($i=0; $i<$flds; $i++) { $field = pg_field_name($result, $i); echo "<th> ".$field." </th>"; } echo "</tr>"; for ($i = 0 ; $i < pg_num_rows($result) ; $i++){ $rows = pg_fetch_array($result, NULL, PGSQL_ASSOC); echo "<tr><td><center>".$rows['id']."</center></td>"; echo "<td>".$rows['name']."</td>"; echo "<td><center>".$rows['age']."</center></td/></tr>"; } echo "</table>"; $close_flag = pg_close($link); ?> </body> </html>
●add.html
<html> <head><title>PHP TEST</title></head> <body> <p><a href="index.html">メニュー</a></p> <form action="./add.php" method="post"> <p>名前:<input type="text" size="20" name="name" value=""></p> <p>年齢:<input type="text" size="20" name="age" value=""></p> <p><input type="submit" value="送信"><input type="reset" value="リセット"></p> </form> </body> </html>
●add.php
<html> <head><title>Add member</title></head> <body> <p><a href="index.html">メニュー</a></p> <?php $conn = "host=localhost dbname=postgres user=postgres password=postgres"; $link = pg_connect($conn); if (!$link) { die('接続失敗です'.pg_last_error()); } $name = $_POST['name']; $age = $_POST['age']; //SQLの実行 $sql = "INSERT INTO staff ( name, age) VALUES ( "; $sql .= "'". $name."'"; $sql .= ",$age)"; $result_flag = pg_query($sql); if (!$result_flag) { die('INSERTクエリーが失敗しました。'.pg_last_error()); } $close_flag = pg_close($link); ?> </body> </html>
●参考
c>psql -U postgres PWD: postgres #"help"; -- help短縮型 #\h -- quit #CTRL + c or #\q \l <-- show databases; \d <-- show tables; \du <-- user名を表示 \d table <-- table 詳細 describe データベース名を入れるとそのデータベースに接続 createuser user name createdb データベース名 #aoc #select * from staff; #drop table xxxx // IdはAutoincrement型なので以下のようにしてインサートする。 #insert into staff(name,age)Values('june',23);
●以下を得ました。(多謝)(http://developpp.blog.jp/archives/8224244.html)
postgres – シーケンス inser時に自動採番
inser文発行時に自動採番する方法
serial型
テーブルを作成する際に、自動的に番号を採番したいフィールドに対しserial型を指定する。
※serial型を指定すると自動的にシーケンスが作成される。
create table sequence_test (
auto_no serial ,
name varchar(50),
primary key(auto_no)
);
insert into sequence_test (name) values(‘test1’);
insert into sequence_test (name) values(‘test2’);
select * from sequence_test;
–auto_no, name
–1, test1
–2, test2
–sequence_test_auto_no_seqというシーケンスが自動的に作成され連番を振っている。
シーケンスを作成しcreta tableに組み込む
テーブルを作成する際に、あらかじめ作成したシーケンスを指定する。
create sequence sequence_test_seq;
create table sequence_test (
auto_no int DEFAULT nextval(‘sequence_test_seq’),
name varchar(50),
primary key(auto_no)
);
insert into sequence_test (name) values(‘test1’);
insert into sequence_test (name) values(‘test2’);
select * from sequence_test;
–auto_no, name
–1, test1
–2, test2