PHP: InterBase関数 - Manual
PHP  
downloads | documentation | faq | getting help | mailing lists | | php.net sites | links | my php.net 
search for in the  
<ifxus_write_slobibase_add_user>
view the version of this page
Last updated: Tue, 21 Dec 2004

XLVIII. InterBase関数

導入

InterBaseはBorland/Inpriseが開発した有名なデータベースです。 InterBaseに関する詳細な情報は、 から得ることができます。 ところで、InterBaseはオープンソース運動に加わりました!

注意: InterBase 6の完全なサポートがPHP 4.0で追加されました。

このデータベースは、シングルクオート(')文字をエスケープに使用しま す。この動作はSybaseデータベースに似ており、以下のディレクティブ を php.ini に追加して下さい。

magic_quotes_sybase = On

インストール手順

PHPでInterBaseサポートを有効にするには、 --with-interbase[=DIR]を指定して設 定を行います。ただし、DIRはInterBaseのベースインストールディレクトリ で、デフォルトは/usr/interbaseです。

Win32ユーザへの注意: このモジュールをWindows環境で有効にするには、 gds32.dllをPHP/Win32バイナリパッケージのDLLフォ ルダから使用するWindowsマシンのSYSTEM32フォルダ(例: C:\WINNT\SYSTEM32 またはC:\WINDOWS\SYSTEM32)にコピーする必要があります。 InterBaseデータベースサーバをPHPを実行しているのと同じマシンにイン ストールしている場合、このDLLはすでにあるはずです。この場合、 DLLフォルダからgds32.dllをコピーする必要はあり ません。

実行用の設定

これらの関数の動作は、php.iniの設定により変化します。

表 1. InterBase設定オプション

名前デフォルト変更の可否
ibase.allow_persistent"1"PHP_INI_SYSTEM
ibase.max_persistent"-1"PHP_INI_SYSTEM
ibase.max_links"-1"PHP_INI_SYSTEM
ibase.default_userNULLPHP_INI_ALL
ibase.default_passwordNULLPHP_INI_ALL
ibase.timestampformat"%m/%d/%Y%H:%M:%S"PHP_INI_ALL
ibase.dateformat"%m/%d/%Y"PHP_INI_ALL
ibase.timeformat"%H:%M:%S"PHP_INI_ALL
PHP_INI_* 定数の定義と詳細については、ini_set()を 参照して下さい。

定義済みの定数

これらの定数は、この拡張モジュールで定義されており、 この拡張モジュールがPHP内部にコンパイルされているか実行時に動的にロー ドされるかのどちらかの場合のみ使用可能です。

The following constants can be passed to ibase_trans() to specify transaction behaviour.

表 2. Firebird/InterBase transaction flags

ConstantDescription
IBASE_DEFAULT The default transaction settings are to be used. This default is determined by the client library, which defines it as IBASE_WRITE|IBASE_CONCURRENCY|IBASE_WAIT in most cases.
IBASE_READStarts a read-only transaction.
IBASE_WRITEStarts a read-write transaction.
IBASE_CONSISTENCYStarts a transaction with the isolation level set to 'consistency', which means the transaction cannot read from tables that are being modified by other concurrent transactions.
IBASE_CONCURRENCYStarts a transaction with the isolation level set to 'concurrency' (or 'snapshot'), which means the transaction has access to all tables, but cannot see changes that were committed by other transactions after the transaction was started.
IBASE_COMMITTEDStarts a transaction with the isolation level set to 'read committed'. This flag should be combined with either IBASE_REC_VERSION or IBASE_REC_NO_VERSION. This isolation level allows access to changes that were committed after the transaction was started. If IBASE_REC_NO_VERSION was specified, only the latest version of a row can be read. If IBASE_REC_VERSION was specified, a row can even be read when a modification to it is pending in a concurrent transaction.
IBASE_WAITIndicated that a transaction should wait and retry when a conflict occurs.
IBASE_NOWAITIndicated that a transaction should fail immediately when a conflict occurs.

The following constants can be passed to ibase_fetch_row(), ibase_fetch_assoc() or ibase_fetch_object() to specify fetch behaviour.

表 3. Firebird/InterBase fetch flags

ConstantDescription
IBASE_FETCH_BLOBSAlso available as IBASE_TEXTfor backward compatibility. Causes BLOB contents to be fetched inline, instead of being fetched as BLOB identifiers.
IBASE_FETCH_ARRAYSCauses arrays to be fetched inline. Otherwise, array identifiers are returned. Array identifiers can only be used as arguments to INSERT operations, as no functions to handle array identifiers are currently available.
IBASE_UNIXTIMECauses date and time fields not to be returned as strings, but as UNIX timestamps (the number of seconds since the epoch, which is 1-Jan-1970 0:00 UTC). Might be problematic if used with dates before 1970 on some systems.

The following constants are used to pass requests and options to the service API functions (ibase_server_info(), ibase_db_info (), ibase_backup(), ibase_restore () and ibase_maintain_db()). Please refer to the Firebird/InterBase manuals for the meaning of these options.

IBASE_BKP_IGNORE_CHECKSUMS

IBASE_BKP_IGNORE_LIMBO

IBASE_BKP_METADATA_ONLY

IBASE_BKP_NO_GARBAGE_COLLECT

IBASE_BKP_OLD_DESCRIPTIONS

IBASE_BKP_NON_TRANSPORTABLE

IBASE_BKP_CONVERT

Options to ibase_backup()()

IBASE_RES_DEACTIVATE_IDX

IBASE_RES_NO_SHADOW

IBASE_RES_NO_VALIDITY

IBASE_RES_ONE_AT_A_TIME

IBASE_RES_REPLACE

IBASE_RES_CREATE

IBASE_RES_USE_ALL_SPACE

Options to ibase_restore()

IBASE_PRP_PAGE_BUFFERS

IBASE_PRP_SWEEP_INTERVAL

IBASE_PRP_SHUTDOWN_DB

IBASE_PRP_DENY_NEW_TRANSACTIONS

IBASE_PRP_DENY_NEW_ATTACHMENTS

IBASE_PRP_RESERVE_SPACE

IBASE_PRP_RES_USE_FULL

IBASE_PRP_RES

IBASE_PRP_WRITE_MODE

IBASE_PRP_WM_ASYNC

IBASE_PRP_WM_SYNC

IBASE_PRP_ACCESS_MODE

IBASE_PRP_AM_READONLY

IBASE_PRP_AM_READWRITE

IBASE_PRP_SET_SQL_DIALECT

IBASE_PRP_ACTIVATE

IBASE_PRP_DB_ONLINE

IBASE_RPR_CHECK_DB

IBASE_RPR_IGNORE_CHECKSUM

IBASE_RPR_KILL_SHADOWS

IBASE_RPR_MEND_DB

IBASE_RPR_VALIDATE_DB

IBASE_RPR_FULL

IBASE_RPR_SWEEP_DB

Options to ibase_maintain_db()

IBASE_STS_DATA_PAGES

IBASE_STS_DB_LOG

IBASE_STS_HDR_PAGES

IBASE_STS_IDX_PAGES

IBASE_STS_SYS_RELATIONS

Options to ibase_db_info()

IBASE_SVC_SERVER_VERSION

IBASE_SVC_IMPLEMENTATION

IBASE_SVC_GET_ENV

IBASE_SVC_GET_ENV_LOCK

IBASE_SVC_GET_ENV_MSG

IBASE_SVC_USER_DBPATH

IBASE_SVC_SVR_DB_INFO

IBASE_SVC_GET_USERS

Options to ibase_server_info()

目次
ibase_add_user --  Add a user to a security database (only for IB6 or later)
ibase_affected_rows --  Return the number of rows that were affected by the previous query
ibase_backup --  Initiates a backup task in the service manager and returns immediately
ibase_blob_add --  生成されたblobにデータを追加する
ibase_blob_cancel --  blobの生成を取り消す
ibase_blob_close --  blobを閉じる
ibase_blob_create --  データを追加するためにblobを生成する
ibase_blob_echo --  ブラウザにblobの内容を出力する
ibase_blob_get --  オープンしたblobからデータのバイト数を取得する
ibase_blob_import --  blobを生成し、ファイルをコピーし、閉じる
ibase_blob_info --  blobの長さと他の便利な情報を返す
ibase_blob_open --  データの一部を取得するためにblobをオープンする
ibase_close --  InterBaseデータベースへの接続を閉じる
ibase_commit_ret -- Commit a transaction without closing it
ibase_commit -- トランザクションをコミットする
ibase_connect --  InterBaseデータベースへの接続をオープンする
ibase_db_info --  Request statistics about a database
ibase_delete_user --  Delete a user from a security database (only for IB6 or later)
ibase_drop_db --  Drops a database
ibase_errcode --  Return an error code
ibase_errmsg --  エラーメッセージを返す
ibase_execute -- 準備されたクエリを実行する
ibase_fetch_assoc --  Fetch a result row from a query as an associative array
ibase_fetch_object -- InterBaseデータベースからオブジェクトを得る
ibase_fetch_row -- InterBaseデータベースから1行分の結果を取得する
ibase_field_info --  フィールドに関する情報を得る
ibase_free_event_handler --  Cancels a registered event handler
ibase_free_query --  準備されたクエリにより確保されたメモリを解放する
ibase_free_result -- 結果セットを解放する
ibase_gen_id --  Increments the named generator and returns its new value
ibase_maintain_db --  Execute a maintenance command on the database server
ibase_modify_user --  Modify a user to a security database (only for IB6 or later)
ibase_name_result --  Assigns a name to a result set
ibase_num_fields --  結果セットにおけるフィールド数を得る
ibase_num_params --  Return the number of parameters in a prepared query
ibase_param_info --  Return information about a parameter in a prepared query
ibase_pconnect --  InterBaseデータベースへの持続的接続をオープンする
ibase_prepare --  後でパラメータのバインド及び実行するためにクエリを準備する
ibase_query -- InterBaseデータベースでクエリを実行する
ibase_restore --  Initiates a restore task in the service manager and returns immediately
ibase_rollback_ret -- Roll back a transaction without closing it
ibase_rollback -- トランザクションをロールバックする
ibase_server_info --  Request information about a database server
ibase_service_attach --  Connect to the service manager
ibase_service_detach --  Disconnect from the service manager
ibase_set_event_handler --  Register a callback function to be called when events are posted
ibase_timefmt --  クエリーから返されるtimestamp、data、time型カラムのフォーマットを設定する
ibase_trans -- トランザクションを開始する
ibase_wait_event --  Wait for an event to be posted by the database


add a note add a note User Contributed Notes
InterBase関数
chrisg at cordell dot com dot au
04-Jun-2004 06:59
Simple function to retrieve the results of an SQL statement into an array, will also cater for BLOB fields:

function interbase_sql_exec ($sql) {
   $dataArr = array();
   $host = "svrname:path\filename.GDB";
   $username = "whatever";
   $password = "******";
   $connection = ibase_connect ($host, $username, $password,'ISO8859_1', '100', '1');
   $rid = @ibase_query ($connection, $sql);
   if ($rid===false) errorHandle(ibase_errmsg(),$sql);
   $coln = ibase_num_fields($rid);
   $blobFields = array();
   for ($i=0; $i < $coln; $i++) {
       $col_info = ibase_field_info($rid, $i);
       if ($col_info["type"]=="BLOB") $blobFields[$i] = $col_info["name"];
   }
   while ($row = ibase_fetch_row ($rid)) {
       foreach ($blobFields as $field_num=>$field_name) {
           $blobid = ibase_blob_open($row[$field_num]);
           $row[$field_num] = ibase_blob_get($blobid,102400);
           ibase_blob_close($blobid);
       }
       $dataArr[] = $row;
   }
   ibase_close ($connection);
   return $dataArr;
}
felixlee at singnet dot com dot sg
03-Jul-2003 06:33
Here's an example for getting results back from stored procedure in firebird.
The example make use of the stored procedure in Employee.gdb and the show_langs procedure.
 

$host = 'localhost:X:/firebird/examples/Employee.gdb';
$username='SYSDBA';
$password='masterkey';

$dbh = ibase_connect ( $host, $username, $password ) or die ("error in db connect");
 $stmt="Select * from SHOW_LANGS('SRep',4,'Italy')";
 $query = ibase_prepare($stmt);
 $rs=ibase_execute($query);
$row = ibase_fetch_row($rs);

echo $row[0];

/* free result */
ibase_free_query($query);
ibase_free_result($rs);

/* close db */
ibase_close($dbh);
?>
lars at dybdahl dot net
20-Sep-2002 02:32
It is not possible to use interbase/firebird without initiating transactions. It seems that transactions are not automatically committed or rolled back at the end of a script, so remember to end all interbase enabled scripts with ibase_rollback() or ibase_commit().

Worse is, that if you use ibase_pconnect (recommended), transactions survive from one request to the next. So that if you don't rollback your transaction at the end of the script, another user's request might continue the transaction that the first request opened.

This has two implications:
1) Clicking refresh in your browser won't make you see newer data, because you still watch data from the same transaction.
2) Some php scripts might fail occassionally and not fail in other occasions, depending on with apache server thread and thereby which transaction they start using.

Unfortunately, there is no such thing as
if (ibase_intransaction()) ibase_rollback();

so be sure that ALL your scripts end with an ibase_rollback() or ibase_commit();
interbase at almico dot com
05-Sep-2002 09:24
If you are using VirtualHosts with Apache, you might find useful the following directive:

php_flag magic_quotes_sybase on

Use it in any VirtualHost and it will be set locally to that VirtualHost without interfering with any global setting.
This is an example:

<VirtualHost 555.666.777.888>
   ServerName www.samplehost.com
   DirectoryIndex index.php index.htm
   php_flag magic_quotes_sybase on
</VirtualHost>
theynich_s at yahoo dot com
11-May-2002 06:16
Hello PHP Mania,

i have made a paging for PHP with Interbase...... :)

i hope it usefull and work....:)

it`s a litle bit of example :

<?
$connection
= ibase_connect($yourdb, $user, $password);

$filename = BASENAME(__FILE__);
$strsql = "Your SQL";
$result = ibase_query($connection, $strsql);

function
ibase_num_rows($query) { //I have pick it from [email protected]
 
$i = 0;
 while (
ibase_fetch_row($query)) {
  
$i++;
  }
return
$i;
}
$nrow = ibase_num_rows($result);//sum of row

$strSQL = "your SQL";
$result = ibase_query($connection, $strSQL);

if (!isset(
$page))
 
$page = 1;

$
$i = 0;
$recperpage = 4;
$norecord = ($page - 1) * $recperpage;
if (
$norecord){
 
$j=0;
  while(
$j < $norecord and list($code, $name)= ibase_fetch_row($result)){

 
$j++;
  }
}
echo
"<table>";
while (list(
$code, $name)= ibase_fetch_row($result) and $i < $recperpage){

 
?>
    <tr>
       <td width="5%"><? echo $code; ?></td>
       <td><? echo $name; ?></td>
   </tr>
<?
$i
++;
}

$incr = $page + 1;
if (
$page > 1) $decr = $page - 1;

$numOfPage = ceil($nrow/$recperpage);
?>
    <tr>
<td colspan="3" align="center"><?if ($page <= 1)
                   echo
"<span>Prev</span>";
                 else
                     echo
"<a href=".$filename."?page=".$decr.">Prev</a>";
              
?>
                &nbsp;&nbsp;
               <?if ($page == $numOfPage)
                   echo
"<span>Next</span>";
                 else
                     echo
"<a href=".$filename."?page=".$incr.">Next</a>";?>
</td>
</tr>
</table>
johan at essay dot org
07-Aug-2000 02:24
For those who have problem with returning values from Stored Procedures in PHP-Interbase,  I have found a solution.  Use a select sentence like this:
select * from sp_prodecure(param, ...)
However, it is important that the procedure has a SUSPEND statement or else the procedure won't return any values.

But the "message length" (see above note) bug that you encounter when you try to execute a procedure should be fixed !

<ifxus_write_slobibase_add_user>
 Last updated: Tue, 21 Dec 2004
show source | credits | sitemap | contact | advertising | mirror sites 
Copyright © 2001-2005 The PHP Group
All rights reserved.
This unofficial mirror is operated at: /
Last updated: Mon Mar 14 08:13:06 2005 Local time zone must be set--see zic manual page