PostgreSQL(6)-MDB2とPDO-

MDB2PEARというクラスライブラリ郡の中にあるクラスです。

MDB2は以前記載させて頂いた様々なデータベースを共通のコードでコントロールできるクラスです。

では、MDB2をインストールします。

下記コマンドを実行します。

pear install MDB2

見事にエラーが発生しました。

おそらくPHP5.5以降に対応していないのではないかと思います。

うーん、どうしたものかと、検討していたら、PDOというクラスがある事がわかりました。

では、早速試してみたいと思います。

PostgreSQLとの接続は、クラスのインスタンスを作成することで、確立されます。


//PDOクラスのインスタンスを作成する事でデータベースと接続します。
define('DSN','pgsql:dbname=samplesql;user=samplesql;password=samplesql');
$link = new PDO(DSN);

if(!$link){
	die('error');
}else{
	echo "connect<br/>\n";
}

//queryメソッドでPostgreSQLを操作
$sql = sprintf("select * from test");
$res = $link->query($sql);

//fetch(PDO::FETCH_ASSOC)メッソドで連想配列を1行ずつ取得
while ($row = $res->fetch(PDO::FETCH_ASSOC)) {
	foreach($row as $filed_name => $value){
		print "[{$filed_name}] = {$value}<br/>\n";
	}
}

//PDOクラスにNULLを代入する事でデータベースとの接続を切断する
$link = NULL;

参考書籍

今すぐ導入! PHP×PostgreSQLで作る最強Webシステム改訂版 [ 石井達夫 ]

PostgreSQL(5)-POSTとSESSION-

PostgresSQLの接続を維持する為の手段として、POSTの仕組みを使用する事ができます。

index.php

//formタグのmethod属性で送信方法を指定、action属性で移動先ページを指定
<form method="post" action="login.php">
//inputタグのtype属性で移動先ページへ渡す情報入力欄を作成
<table>
<tr><td>データベース名</td><td><input type="text" name="dbname" value='$dbname'></td></tr>
<tr><td>ユーザ名</td><td><input type="text" name="user" value='$user'></td></tr>
<tr><td>password</td><td><input type="text" name="pass" value='$pass'></td></tr>
</table>
//inputタグのtype属性をsubmitとして、送信ボタンを作成
<input type="submit" name="start" value="実行">

login.php

//index.phpで入力されたデータを取得
$dbname = $_POST['dbname'];
$user = $_POST['user'];
$pass = $_POST['pass'];
//dbに接続
$con = pg_connect("dbname='$dbname1' user='$user1'password='$pass'");
if ($con == true) {echo "dbに接続できました<br/>\n";}

このようにPOSTを使用する事で、dbnameやuser、passwordを別のページヘ送り、PostgreSQLとの接続を維持する事ができます。

しかし、POSTはURLに属性情報を追加する事で、inputタグに付与した情報を送付するので、セキュリティ上、問題もあります。

毎回、データベースを接続する為に、URLに情報を付与するのは問題です。

そこで、SESSION機能を使用します。

login.phpを少々改良します。
login.php

//SESSIONを開始する
session_start();
//index.phpで入力されたデータを取得
$dbname = $_POST['dbname'];
$user = $_POST['user'];
$pass = $_POST['pass'];
//dbに接続
$con = pg_connect("dbname='$dbname1' user='$user1'password='$pass'");
if ($con == true) {echo "dbに接続できました<br/>\n";}
$_SESSION['dbname'] = $_POST['dbname'];
$_SESSION['user'] = $_POST['user'];
$_SESSION['pass'] = $_POST['pass'];
header( "Location: ./session.php" ) ;

session.php

//login.phpで入力されたデータを取得
$dbname = $_SESSION['dbname'];
$user = $_SESSION['user'];
$pass = $_SESSION['pass'];
//dbに接続
$con = pg_connect("dbname='$dbname1' user='$user1'password='$pass'");
if ($con == true) {echo "引き続きdbに接続できました<br/>\n";}
session_destroy();

このように入力した情報を保持する事ができます。

SESSIONはサーバー側に必要な情報を保持するので、POSTより安全です。

POSTとSESSIONについて見てきましたが、あとCOOKIEも関係してきます。

実際にSESSIONを使用して、情報を取得するにしても、何かしらのキーが必要です。

このキーはCOOKIEに保存される事が多いです。

参考書籍

今すぐ導入! PHP×PostgreSQLで作る最強Webシステム改訂版 [ 石井達夫 ]

PostgreSQL(4)-PHPから接続-

PHPからPsotgresSQLを操作してみたいと思います。

試しにPHPでコードを作成して動作させてみましたが、動きませんでした。

ライブラリーが必要です。

下記コマンドを実行して、ライブラリーをインストールします。

sudo apt-get install php5-pgsql;

apache2のリスタートをします。

sudo service apache2 restart;

PHPからPostgresSQLを操作するコードが動作しました。


//pg_connectでデータベースと接続します。
$link = pg_connect("host=localhost dbname=samplesql user=samplesql password=samplesql");

if(!$link){
	//pg_last_errorでデータベースに接続けいなかった際のエラー情報を表示
	die('error.'.pg_last_error());
}else{
	print("connect success\n");
}

//pg_queryでPostgreSQLを操作
$str_sql = "select * from test";
$rs = pg_query($link, $str_sql);

//pg_fetch_assocで連想配列を1行ずつ取得
while($arr_record = pg_fetch_assoc($rs)){
	foreach($arr_record as $filed_name => $value){
		print "[{$filed_name}] = {$value}</br>\n";
	}
}

//pg_closeでデータベースとの接続を切断する
$close_flg = pg_close($link);

if($close_flg){
	print("close success\n");
}

参考書籍

今すぐ導入! PHP×PostgreSQLで作る最強Webシステム改訂版 [ 石井達夫 ]

PostgreSQL(3)-テーブルへの挿入・削除・表示-

前回、データベースの箱を作成しましたので、箱の中にテーブルを追加していこうと思います。

create table test (no integer, name varchar(20));

testという名前のテーブルをが作成されました。

下記コマンドでテーブル一覧を表示できます。

\d

また、testの()の中は列の情報となります。

no integerは、integer型のnoという名前の列となります。

name varchar(20)は、varchar型のnameという名前の列なります。

下記コマンドでテーブルの列の情報を表示できます。

\d test

テーブルに値を挿入します。

insert into test(no, name) values(1, 'aiueo');

テーブルに挿入した値を表示してみます。

select * from test;

テーブルに挿入した値が確認できると思います。

行を削除する場合は、下記のSQL言語を実行します。

delete from test WHERE no = 1;

列を挿入する場合は、下記のSQL言語を実行します。

alter table test add column detail varchar(100);

列を削除する場合は、下記のSQL言語を実行します。

alter table test drop column detail;

テーブルの列に制約をつける事もできます。

create table test (no int NOT NULL, name text);

下記のSQL言語は主キーの設定です。

alter table test add PRIMARY KEY(no);

参考書籍

SQL 第2版 ゼロからはじめるデータベース操作 (プログラミング学習シリーズ)

PostgreSQL(2)-役割と認証-

前回、PostgreSQLのインストールを実施しました。

では、早速、データベースに接続してみようと思います。

sudo psql

と接続を試みたところ、

psql: FATAL: password authentication failed for user "root"

と表示されました。

権限が無い様なので、ユーザーを変更します。

su – postgres

postgresユーザーに変更されました。

それでは、もう一度、

sudo psql

psql (9.3.11)

と接続できたようです。

下記コマンドを実行すると、

\du

役割一覧が表示されます。

現在は、postgresのみ割り当てられているので、新規に追加してみます。

CREATE ROLE samplesql LOGIN CREATEDB PASSWORD '******';

もう一度、役割一覧を見てみると、samplesqlが追加されています。

posgresと違い、samplesqlはCreate DBの役割属性のみ割り当てられています。

データベースを作成してみます。

CREATE DATABASE samplesql OWNER samplesql;

CREATE DATABASE

下記コマンドでデータベースを一覧を表示します。

\l

新規にデータベースが作成された事が確認できます。

作成したDBに接続してみます。

psql --username=samplesql --password --dbname=******

psql: FATAL: Peer authentication failed for user "samplesql"

Peer認証である為、接続できません。

下記のファイルを編集して認証の設定を変更します。

/etc/postgresql/9.3/main/pg_hba.conf

参考書籍

SQL 第2版 ゼロからはじめるデータベース操作 (プログラミング学習シリーズ)

PostgreSQL(1)-インストール-

リレーショナルデータベースという種類のデータベースがあります。

アルファベットで書くとRelational Databaseとなります。

英語の意味通り、「関係データベース」とも呼ばれます。

列、行からなる表の形式でデータは管理されております。

SQL言語を使用して、データベースを操作する事が可能です。

リレーショナルデータベースとして下記のようなデータベースがあります。

①Oracle Database

②SQL Server

③DB2

④PostgreSQL

⑤MySQL

この中で、今回はPostgreSQLを使用したいと思います。

まずは、PostgreSQLのインストールです。

下記のコマンドを実行して、PostgreSQLをインストールします。

sudo apt-get install postgresql

次にPHP言語からデータベースの操作もしたいので、PHP5をインストールします。

まずは下記のコマンドを実行して、apache2をインストールします。

sudo apt-get install apache2

次に下記のコマンドを実行して、PHP5をインストールします。

sudo apt-get install PHP5

PHP5がインストールされているか確認を実施します。

下記コマンドを実行して、対話シェルを実行します。

sudo php5 -a

php > echo "abcde\n";

abcde

php > echo "abcde\n"

PHP言語が動作している事がわかります。

次にapacheのルートフォルダ(\var\www\)にPHPファイルを作成して、ブラウザ上で表示できれば、動作確認完了です。