Getting Started with Pervasive PSQL (v11)

Web ベースのデータベース アクセスの設定

ここでは、Linux の Web アプリケーションから Pervasive PSQL データにアクセスするための Web サーバーの構成情報、また、その Pervasive PSQL データに接続するための接続用コードの抜粋やサンプル コードを提供します。

ODBC の動作

Pervasive PSQL を最初にインストールしたとき、odbc.ini ファイル は /usr/local/psql/etc に書き込まれます。

unixODBC などの別の ODBC ドライバー マネージャーがあった場合、これらのドライバー マネージャーは /etc/odbc.ini といった別の場所にある odbc.ini を使用している可能性があります。

ODBC セットアップを統一するには、unixODBC が使用する odbc.ini ファイルのロケーションのソフト リンクを Pervasive PSQL ディレクトリに追加するという方法があります。

su  
cd /etc 
ln -s /usr/local/psql/etc/odbc.ini 

Web サーバーの構成

ここでは、Apache などの Web サーバーが搭載されているマシンを設定する方法について説明します。

Apache などの Web サーバーを起動するユーザー アカウントは pvsw グループのメンバーに属していなければなりません。これらのユーザー アカウントは nobody などの制限付きアカウントに基づいて実行します。

ユーザー アカウントを探す場合は Apache 構成ファイルを見てください。これは通常 /etc/httpd/conf/httpd.conf にあります。

このファイルの以下の行では、Apache サーバーを使用して操作するユーザーを示します。

User nobody 
Group nobody 
Options ExecCgi Indexes 

このユーザーを pvsw グループに追加し、お使いの Apache 構成ファイルで使用している名前に置き換えます。

/usr/bin/gpasswd -a nobody pvsw

PHP

PHP では Microsoft の ASP や Java の JSP に類似したスタイルを使用して Web アプリケーションの開発を簡単に行うことができます。PHP の使用は HTML でデータベース呼び出しを特殊なタグで囲み、出力を書式設定します。

Pervasive PSQL PHP の要件

PHP の接続用コードの一部

このコード部分は PHP を使って Pervasive PSQL データベースに接続する基本的な部分です。

// ユーザー ID、パスワードなしで DEMODATA データベースに
接続する 
$connect = odbc_connect("demodata", "", "");    
 
// クエリ変数を SQL に設定する 
$query = "SELECT * from Department";             
 
// クエリの結果オブジェクトを取得する 
$result = odbc_exec($connect, $query);  

PHP サンプル

以下に示す完全なサンプルでは、ユーザーが DEMODATA の 3 つのテーブルから 1 つを選択し、そのテーブルを表示します。

<HTML> 
<HEAD> 
<TITLE>PVSW PHP サンプル</TITLE> 
</HEAD> 
<BODY> 
 
<H1>Pervasive Hello World サンプル - PHP ODBC API を
使用した PHP)</H1> 
<P> 
このサンプルでは PHP を使用して下記のドロップダウン リスト
にある DEMODATA データベースのテーブルを表示します。 
</p> 
 
<? 
 
// -------メイン メニュー----------------------- 
 
// URL 内に指定された機能がない場合 
 
 
if (!(isset ($HTTP_GET_VARS["_function"]))): 
 
// -------------------------------------------- 
 
?> 
 
<p>以下のテーブルから選択してください。</p> 
<form method=post 
action='<?=$PHP_SELF?>?_function=showtable'> 
<select name="selecttable"> 
<option SELECTED value="Department">Department 
<option value="Course">Course 
<option value="Room">Room 
</select> 
 
<p> 
<input type=submit value="テーブルの表示"> 
</p> 
</form> 
 
<? 
 
// ------テーブルの表示------------------------- 
 
Elseif ($HTTP_GET_VARS["_function"] == 
"showtable"): 
 
// -------------------------------------------- 
 
print("<p><a href='$PHP_SELF'>サンプル 1 メイン メ
ニュー</a>に戻る</p>"); 
 
   $thetable = $HTTP_POST_VARS["selecttable"];     
// フォームのデータから開くテーブルを決定する 
 
   $connect = odbc_connect("demodata", "", "");    
// ユーザー ID、パスワードなしで DEMODATA データベースに
接続する  
   $query = "SELECT * from $thetable";             
// 実行する SQL に含めるクエリ変数を設定する  
   $result = odbc_exec($connect, $query);         
// クエリを実行する 
 
// 結果セット全体を HTML テーブルとして出力する 
//(以下の行のコメントを解除します) 
// odbc_result_all($result); 
 
// あるいは、出力を自分で独自に書式設定し、  
// より見やすいテーブルを表示する(ただし、より多くのコード
作成が必要) 
 
// 行カウンターを初期化する 
$i = 0;                                      
 
// 列数を決定する 
$numcols = odbc_num_fields($result);         
 
// HTML テーブルを開始する 
print("<table border=1 cellpadding=5>");    
 
 
 
 
// 列見出しの印刷 
 
  print("<tr>"); // 行の開始 
 
  while ($i < $numcols)  
      { 
       $i++;  
       $colname = odbc_field_name($result, $i); 
       print("<th>$colname</th>");  
     } 
  $i=0;  
 
 print("</tr>");           // 行の終了 
 
// テーブル データの出力 
 
// 行が存在する限り実行 
while(odbc_fetch_row($result))  
  { 
     print("<tr>");                // 行の開始 
 
     while ($i < $numcols) 
     { 
      $i++; 
      $tablecell = odbc_result($result, $i); 
      print("<td>$tablecell</td>"); 
     } 
 
     print("</tr>");           // 行の終了 
     $i = 0;                     // カウンターのリセット 
 
  }                               // odbc フェッチ行の終了 
 
print("</table>");               // HTML テーブルの終了 
 
odbc_close($connect);          // 接続を閉じる 
 
 // テーブル表示の終了 
 
// ---無効なメニュー オプションの取得---------------- 
 
Else: 
 
// ---------------------------------------------- 
 
print("<p>無効な機能が入力されました。<a 
href='$PHP_SELF'>再試行</a>してください。</p>"); 
 
 
Endif; 
 
?> 
 </BODY> 
 </HTML> 

PHP のその他のサンプル

より一般的な PHP サンプル アプリケーションが Pervasive Software の Web サイトからオンラインで入手することができます。このアプリケーションではビデオ店の操作をシミュレートします。

このサンプルは Pervasive PSQL SDK に含まれている Pvideo データベースを使用しています。SDK をインストールしていない場合は、サンプル アプリケーションと一緒にこの Pvideo データベースをダウンロードすることができます。

Perl

Perl は Pervasive PSQL を使ったコマンド ラインおよび Web ベースのアプリケーションの両方に使用できます。

Pervasive PSQL Perl の要件

Perl の接続用コードの一部

このコード部分は Perl を使って Pervasive PSQL データベースに接続する基本的な部分です。

# Perl のデータベース インターフェイス(DBI)の使用を指定
する 
use DBI;  
 
# ユーザー ID、パスワードなしで DEMODATA データベースに接
続する 
$dbInfo = "DBI:ODBC:DEMODATA";  
$dbUserName = "";  
$dbPassword = "";  
 
# クエリ変数を SQL に設定する 
$query = "SELECT * FROM Department";  
 
# サーバーへ接続する 
$connect = DBI->connect($dbInfo, $dbUserName, 
$dbPassword);  
 
# SQL クエリを準備する 
$myRecordSet = $connect->prepare($query);  
 
# クエリを実行してレコードセットを取得する 
$myRecordSet->execute();  
 

Perl のサンプル

以下に示す完全なサンプルでは、ユーザーが DEMODATA の 3 つのテーブルから 1 つを選択し、そのテーブルを表示します。

 
# Perl のサンプル 
 
use CGI":cgi-lib"; 
$cgiquery = new CGI; 
 
$functionreq = $cgiquery->url_param('_function');     
# GET の場合は 'url_param' を、POST の場合は 'param' を
使用する 
 
print &PrintHeader; 
print &HtmlTop("Pervasive PSQL Hello World サンプル 
- Perl");  
 
print <<ENDOFMENU; 
<H1>Pervasive Hello World サンプル - Perl</H1> 
 
<P> 
このサンプルでは Perl/DBI を使用して下記のドロップダウン 
リストにある DEMODATA データベースのテーブルを表示します。 
</p> 
ENDOFMENU 
 
# -----メイン メニュー-------------------- 
 
# URL 内に指定された機能がない場合 
 
if (!$functionreq) { 
 
# --------------------------------------- 
 
print <<ENDOFTEXT; 
 
<p>以下のテーブルから選択してください。</p> 
<form method=post 
action="$ENV{'SCRIPT_NAME'}?_function=showtable"> 
<select name="selecttable"> 
<option SELECTED value="Department">Department 
<option value="Course">Course 
<option value="Room">Room 
</select> 
<p> 
<input type=submit value="テーブルの表示"> 
</p> 
</form> 
 
ENDOFTEXT 
   
} #  !($function) 
 
# ------テーブル表示------------------------------- 
 
elsif ($functionreq eq "showtable") { 
 
print("<p>Return to <a 
href='$ENV{'SCRIPT_NAME'}'>Perl Hello World サンプル 
-  メイン メニュー</a><に戻る/p>"); 
 
 
# フォームのデータから開くテーブルを決定する 
$thetable = $cgiquery->param('selecttable');          
 
use DBI;  
 
$dbInfo = "DBI:ODBC:DEMODATA";  
$dbUserName = "";  
$dbPassword = "";  
 
$query = "SELECT * FROM $thetable";  
$connect = DBI->connect($dbInfo, $dbUserName, 
$dbPassword);  
 
$myRecordSet = $connect->prepare($query);  
$myRecordSet->execute();  
 
# HTML テーブルを開始する 
print "<table border=1 cellpadding=5>";  
 
# 列見出しの印刷 
 
$num_fields = $myRecordSet->{NUM_OF_FIELDS}; 
$count = 0; 
 
print "<tr >"; 
while ($count < $num_fields) { 
$column_name = $myRecordSet->{NAME}->[$count]; 
print "<th>$column_name</th>"; 
$count++; 
} 
print "</tr>¥n"; 
 
$count = 0; 
 
# テーブル データの出力 
 
while(@row=$myRecordSet->fetchrow_array) { 
  print "<tr>¥n"; 
  while ($count < $num_fields) { 
  print "<td>$row[$count]</td>¥n"; 
  $count++; 
  } 
  print "</tr>¥n";   
  $count = 0; 
}  
 
print "</table>";              # HTML テーブルの終了 
# テーブル表示の終了 
} 
 
# -----無効なメニュー オプションの取得---------------- 
 
else { 
 
print "<p>無効な機能が入力されました。<a 
href='$ENV{'SCRIPT_NAME'}'>再試行</a>してください。
</p>"; 
 
} 
 
print &HtmlBot; 

クライアント情報

Pervasive PSQL における Perl および ODBC の使用