|
|
XLVIII. InterBase関数
InterBaseはBorland/Inpriseが開発した有名なデータベースです。
InterBaseに関する詳細な情報は、
から得ることができます。
ところで、InterBaseはオープンソース運動に加わりました!
注意:
InterBase 6の完全なサポートがPHP 4.0で追加されました。
このデータベースは、シングルクオート(')文字をエスケープに使用しま
す。この動作はSybaseデータベースに似ており、以下のディレクティブ
を php.ini に追加して下さい。
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_user | NULL | PHP_INI_ALL | ibase.default_password | NULL | PHP_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 Constant | Description |
---|
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_READ | Starts a read-only transaction. | IBASE_WRITE | Starts a read-write transaction. | IBASE_CONSISTENCY | Starts 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_CONCURRENCY | Starts 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_COMMITTED | Starts 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_WAIT | Indicated that a transaction should wait and retry when a
conflict occurs. | IBASE_NOWAIT | Indicated 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 Constant | Description |
---|
IBASE_FETCH_BLOBS | Also available as IBASE_TEXTfor backward
compatibility. Causes BLOB contents to be fetched inline, instead of
being fetched as BLOB identifiers. | IBASE_FETCH_ARRAYS | Causes 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_UNIXTIME | Causes 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()
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 = 0;
while (ibase_fetch_row($query)) {
$i++;
}
return $i;
}
$nrow = ibase_num_rows($result);$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>";
?>
<?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 !
| |