SQLの窓 イラストAC フリー素材

2014年07月02日

land.to での PHP + PostgreSQLでの接続テスト

land.to では、もうかなり前から新規申込は停止していますが、既にアカウントを持っている場合は MySQL と PostgreSQL が使用できます。MySQL はめずらしくありませんが、PostgreSQL はけっこう珍しいのでは無いでしょうか。

昔は、直接 SQL を実行できる WEB アプリを公開していたのですが、途中でいろいろあって削除し、それ以来も長い間放置していました。

で、久しぶりに PostgreSQL を確認してみるきちんと動作していたので記録です。

PostgreSQL用 クラス
<?
# ********************************
# データベースクラス
# ********************************
class DB {
 
	var $Connect;
	var $Result;
 
# ********************************
# コンストラクタ
# ********************************
	function DB(
		$Server='localhost',
		$DbName='r205',
		$User='r205',
		$Password='パスワード' ) {
		$this->Connect = pg_connect(
			"host=$Server" .
			" port=5432" .
			" dbname=$DbName" .
			" user=$User" .
			" password=$Password"
		);
	}
 
# ********************************
# 接続解除
# ********************************
	function Close( ) {
		pg_close( $this->Connect );
	}
 
# ********************************
# クエリー
# ********************************
	function Query( $SqlQuery ) {
		$ret = pg_query( $this->Connect, $SqlQuery );
		return $ret;
	}
 
# ********************************
# フェッチ
# ********************************
	function Fetch( $Result ) {
		return pg_fetch_array( $Result );
	}
 
# ********************************
# クエリーとフェッチ
# ********************************
	function QueryEx( $SqlQuery='' ) {
 
		if ( $SqlQuery != '' ) {
			$this->Result = $this->Query( $SqlQuery );
			if ( !$this->Result ) {
				return FALSE;
			}
			return $this->Fetch ( $this->Result );
		}
		else {
			return $this->Fetch ( $this->Result );
		}
 
	}
 
# ********************************
# 実行
# ********************************
	function Execute( $SqlExec ) {
		$ret = pg_query( $this->Connect, $SqlExec );
		return $ret;
	}
 
# ********************************
# バージョン文字列取得
# ********************************
	function Version( ) {
		$Field = $this->QueryEx( "SHOW SERVER_VERSION" );
		return $Field["server_version"];
	}
 
}
?>

データベースの接続や処理そのものは特に問題も無く動作しましたが、header 関数で出力したキャラクタセットがブラウザに届かないので、HTML 側の META 要素で指定しなければ化けてしまいます。また、ini_set( 'display_errors', "1" ) で、エラーを表示するようにしないとデバッグができません。以上2点を注意すれば、MySQL であろうが、PostgreSQL であろうが利用可能です

接続テスト
<?php
header( "Content-Type: text/html; Charset=euc-jp" );
header( "pragma: no-cache" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
header( "Cache-control: no-cache" );

ini_set( 'display_errors', "1" );

require_once( "dbpg.php" );
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
<title></title>
</head>
<body>
<pre>
<?
$SQL = new DB();
if ( $SQL->Connect === false ) {
	print "接続できませんでした<br>\n";
}
else {
	print "接続されました<br>\n";

	$Column = $SQL->QueryEx( "select * from 社員マスタ" );

	while ( $Column ) {

		$Column = $SQL->QueryEx( );
		print_r( $Column );
	}

	$SQL->Close();
}
?>
</pre>
</body>
</html>



【DB関連の最新記事】
posted by at 2014-07-02 21:21 | DB関連 | このブログの読者になる | 更新情報をチェックする