downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

ibase_add_user> <filter_var
[edit] Last updated: Mon, 01 Nov 2010

view this page in

XLII. Firebird/InterBase

Introdução

Firebird/InterBase é um banco de dados relacional que oferecere a maioria da funcionalidade do ANSI SQL-92 que funciona no Linux, Windows, e uma variedade de plataformas Unix. Firebird/InterBase oferrece uma exelente concorencia, alta performance, e uma linguagem poderosa que suporta stored procedures e triggers. Ele é usado em sistemas de produção, sobre uma variedade de nomes deste 1981.

InterBase é o nome da variante de código fechado deste RDBMS que foi desenvolvido pela Borland/Inprise. maiores informações sobre o InterBase esta disponível em http://www.borland.com/interbase/.

Firebird é um projeto comercialmente independente de programadores C e C++, conselheiros tecnicos e pessoal de suporte desenvolvendo e melhorando um banco de dados relacional, multi-plataforma baseado no código fonte liberado pela Inprise Corp (agora conhecido como Borland Software Corp) sobre InterBase Public License v.1.0 em 25 de Julho de 2000. Maiores informações sobre o Firebird esta disponível em http://www.firebirdsql.org/.

Nota: Esta extensão suporta InterBase versão 5 e posteriores e todas as versões do Firebird. Suporte para InterBase versão 5.x será deixado no PHP 5.

Este banco de dados usa aspas simples (') para escapar, um funcionamento semelhante ao do banco de dados Sybase, adicione ao seu php.ini a seguinte diretiva:

magic_quotes_sybase = On

Instalação

Para ativar o suporte InterBase, configure o PHP com --with-interbase[=DIR], aonde DIR é o diretório base da instalação do InterBase, o qual o padrão é /usr/interbase.

Nota para os usários de Win32: Para ativar este módulo em um ambiente Windows, você deverá copiar gds32.dll da pasta DLL do pacote binário PHP/Win32 para a pasta SYSTEM32 em seu computador com Windows. (Ex: C:\WINNT\SYSTEM32 or C:\WINDOWS\SYSTEM32). No caso de você já ter o sevidor de banco de dados InterBase na mesma máquina onde o PHP esta sendo executado, você já deve ter esta DLL. Então você não precisará copiar gds32.dll a partir da pasta DLL.

Configurações em execução

O comportamento dessas funções podem ser modificado pelas configurações do php.ini.

Tabela 1. Opções de configuração do InterBase

NomePadrãoModificávelModificações
ibase.allow_persistent1PHP_INI_SYSTEM 
ibase.max_persistent"-1"PHP_INI_SYSTEM 
ibase.max_links"-1"PHP_INI_SYSTEM 
ibase.default_dbNULLPHP_INI_SYSTEMDisponível desde o PHP 5.0.0.
ibase.default_userNULLPHP_INI_ALL 
ibase.default_passwordNULLPHP_INI_ALL 
ibase.default_charsetNULLPHP_INI_ALLDisponível desde o PHP 5.0.0.
ibase.timestampformat"%Y-%m-%d %H:%M:%S"PHP_INI_ALL 
ibase.dateformat"%Y-%m-%d"PHP_INI_ALL 
ibase.timeformat"%H:%M:%S"PHP_INI_ALL 
Para mais detalhes e definições das constantes PHP_INI_*, veja a documentação de ini_set().

Breve descrição das diretivas de configuração.

ibase.allow_persistent boolean

Quando permitir conexões persistentes ao Firebird/InterBase.

ibase.max_persistent integer

O número máximo de conexões persistentes com o Firebird/InterBase por processo. Novas conexões criadas com ibase_pconnect() não serão persistentes se este número for excedido.

ibase.max_links integer

O número máximo de conexões ao Firebird/InterBase por processo, incluindo as conexões persistentes.

ibase.default_db string

O banco de dados padrão a conectar quando ibase_[p]connect() é chamada sem especificar o nome do banco de dados. Se este valor for definido e o SQL safe mode estiver ativado, não serão permitidas outras conexões a este banco de dados.

ibase.default_user string

O nome de usuário para usar quando estiver se conectando ao banco de dados se não for especificado um nome de usuário.

ibase.default_password string

A senha usada ao conectar ao banco de dados se nenhuma senha for especificada.

ibase.default_charset string

O conjunto de caracteres a usar quando estiver conectando ao banco de dados se nenhum conjunto de caracteres for especificado.

ibase.timestampformat string

ibase.dateformat string

ibase.timeformat string

Estas diretivas são usadas para definir os formatos de data e hora que são usados ao retornas datas e horas do conjunto de resultados, ou quando estiver fornecendo datas e horas em parâmetros.

Constantes pré-definidas

As contantes abaixo são definidas por esta extensão e somente estarão disponíveis quando a extensão foi compilada com o PHP ou carregada dinamicamente durante a execução.

As seguinte constantes podem ser passadas para ibase_trans() para especificar o funcionamento da transação.

Tabela 2. Opções da transação Firebird/InterBase

ConstanteDescrição
IBASE_DEFAULT Serão usadas as definições padrão para a transação. Este padrão é determinado pela biblioteca do cliente, a qual define-o como IBASE_WRITE|IBASE_CONCURRENCY|IBASE_WAIT na maioria ds casos.
IBASE_READComeça uma transação apenas para leitura.
IBASE_WRITEComeça uma transação de leitura e escrita.
IBASE_CONSISTENCYComeça uma transação com o nível de isolação definido como 'consistency', o qual indica que a transação não pode ler de tabelas que estão sendo modificadas por outras transações concorrentes.
IBASE_CONCURRENCYComeça uma transação com o nível de isolação definido como 'concurrency' (ou 'snapshot'), o qual indica que a transação tem acesso a todas as tabelas, mas não pode ver as modificações que foram gravadas por outras transações após a transação ter começado.
IBASE_COMMITTEDComeça uma transação com o nível de isolação definido como 'read committed'. Esta opção deve ser combinada com IBASE_REC_VERSION ou IBASE_REC_NO_VERSION. Este nível de isolação permite acesso para as modifcações salvar após o início da transação. Se IBASE_REC_NO_VERSION for especificada, apenas a ultima versão de uma linha pode ser lida. Se IBASE_REC_VERSION for especificada, uma linha pode ser lida mesmo quando exista uma modificação pendente em uma transação concorrente.
IBASE_WAITIndica que uma transação deve esperar e tentar novamente quando aconteça um conflito.
IBASE_NOWAITIndica que a transação deve falhar imediatamente quando aconteça um conflito.

As seguintes constantes podem ser passadas para ibase_fetch_row(), ibase_fetch_assoc() ou ibase_fetch_object() para especificar o funcionamento para obter.

Tabela 3. Opções para obter do Firebird/InterBase

ConstanteDescrição
IBASE_FETCH_BLOBSTambém disponível como IBASE_TEXTpara compatibilidade com versões anteriores. Faz com que o conteúdo de campos BLOB serão retornados diretamente, ao invés de serem retornados como identificadores BLOB.
IBASE_FETCH_ARRAYSFaz com que as arrays sejam retornadas diretamente. Se não, são retornados identificadores de array. Identificadores de array somente podem ser usados como argumentos para operações INSERT, já que não estão disponíveis atualmente nenhuma função para manipular identificadores de array.
IBASE_UNIXTIMEFaz com que campos de date e time não sejam retornados como strings, mas como timestamps UNIX (o número de segundos deste epoch, o qual é 1-Jan-1970 0:00 UTC). Pode ser problematico se usado com datas antes de 1970 em alguns sistemas.

As seguintes constantes são usados para passar requesições e opções para as funções da API de serviços (ibase_server_info(), ibase_db_info (), ibase_backup(), ibase_restore () e ibase_maintain_db()). Por favor veja o manual do Firebird/InterBase para o significado destas opções.

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

Opções para 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

Opções para 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

Opções para ibase_maintain_db()

IBASE_STS_DATA_PAGES

IBASE_STS_DB_LOG

IBASE_STS_HDR_PAGES

IBASE_STS_IDX_PAGES

IBASE_STS_SYS_RELATIONS

Opções para 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

Opções para ibase_server_info()

Índice
ibase_add_user --  Adiciona um usuário a um banco de dados seguro (apenas para IB6 ou posterior)
ibase_affected_rows --  Retorna o número de linhas que foram afetados pela consulta anterior
ibase_backup --  Initiates a backup task in the service manager and returns immediately
ibase_blob_add --  Adiciona dados em um blob recém criado
ibase_blob_cancel --  Cancela a criação de um blob
ibase_blob_close --  Fecha o blob
ibase_blob_create --  Cria um novo blob para adicionar dados
ibase_blob_echo --  Envia o conteúdo do blob para o browser
ibase_blob_get --  Retorna uma quantidade especificada de bytes de dados de um blob aberto
ibase_blob_import --  Cria um blob, copia um arquivo para ele e o fecha
ibase_blob_info --  Retorna o tamanho do blob e outras informações úteis
ibase_blob_open --  Abre um blob para obter partes de dados
ibase_close --  Fecha uma conexão com um banco de dados InterBase
ibase_commit_ret -- Grava uma transação sem fecha-la
ibase_commit -- Grava uma transação
ibase_connect --  Abre uma conexão com um banco de dados InterBase
ibase_db_info --  Request statistics about a database
ibase_delete_user --  Exclui um usuário de um banco de dados seguro (apenas para o IB6 ou posterior)
ibase_drop_db --  Exclui um banco de dados
ibase_errcode --  Retorna um código de erro
ibase_errmsg --  Retorna uma mensagem de erro
ibase_execute -- Executa uma consulta preparada anteriormente
ibase_fetch_assoc --  Obtém o resultado de uma linha da consulta como uma matriz associativa
ibase_fetch_object -- Obtém uma linha como um objeto de um banco de dados InterBase
ibase_fetch_row -- Obtém uma linha de um banco de dados InterBase
ibase_field_info --  Obtém informação sobre um campo
ibase_free_event_handler --  Cancela um manipulador de eventos registrado
ibase_free_query --  Libera a memória alocada para uma consulta preparada
ibase_free_result -- Libera um conjunto de resultados
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 --  Modifica um usuário para um banco de dados seguro (somente para IB6 ou posterior)
ibase_name_result --  Define um nome para um conjunto de resultados
ibase_num_fields --  Obtém o número de campos em um conjunto de resultados
ibase_num_params --  Retorna o número de parâmetros em uma consulta preparada
ibase_param_info --  Retorna informação sobre um parâmetro em uma consulta preparada
ibase_pconnect --  Abre uma conexão persistente com um banco de dados InterBase
ibase_prepare --  Prepara uma consulta para execução posterior
ibase_query -- Executa uma consulta em um banco de dados InterBase
ibase_restore --  Initiates a restore task in the service manager and returns immediately
ibase_rollback_ret -- Desfaz uma transação sem fecha-la
ibase_rollback -- Desfaz uma transação
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 --  Registra uma função de callback para ser chamada quando eventos são postados
ibase_timefmt --  Define o formato do timestamp, colunas do tipo data e hora retornadas de consultas
ibase_trans -- Inicia uma transação
ibase_wait_event --  Espera por um evento ser postado no banco de dados


ibase_add_user> <filter_var
[edit] Last updated: Mon, 01 Nov 2010
 
add a note add a note User Contributed Notes Firebird/InterBase
sysop at smartnettechnologies dot com 25-Sep-2007 12:01
This example have 2 problems my be the autor writes it to fast but in the first case use one var for define user pass and and the use other one for call them and in secon step use comas after the ;

$db = '/path/to/database.gdb';
$user = 'username';
$password = 'password';
$res = ibase_connect($db,$dbuser,$dbpass) or die("<br>" . ibase_errmsg());

// Query
$sql="SELECT * FROM table;"
fortega at uamericas dot net 01-Jul-2007 02:11
Here is a minimalistic code example. Be sure to create an user and a database in order to make it work.

<?php
// Minimalistic code example

// Connection
$db = '/path/to/database.gdb';
$user = 'username';
$password = 'password';
$res = ibase_connect($db,$dbuser,$dbpass) or die("<br>" . ibase_errmsg());

// Query
$sql="SELECT * FROM table;"
$result=ibase_query($res,$sql) or die(ibase_errmsg());
while(
$row=ibase_fetch_object($result)){
   
// use $row->FIELDNAME not $row->fieldname
   
print $row->FIELDNAME;
}
ibase_free_result($result);

// Closing
ibase_close($res) or die("<br>" . ibase_errmsg());
?>

The following code can be used when creating tables in order to get auto incrementing fields:

<?php

// This function generates an autoincrement field, such as MySQL AUTO_INCREMENT.
function generate_autoincrement($tablename,$primarykey){
   
// * Generator
   
dbexec('CREATE GENERATOR GEN_' . $tablename . '_PK;');
   
// * Trigger
   
dbexec('CREATE TRIGGER INC_' . $primarykey . ' FOR ' . $tablename
       
. chr(13) . 'ACTIVE BEFORE INSERT POSITION 0'
       
. chr(13) . 'AS'
       
. chr(13) . 'BEGIN'
       
. chr(13) . 'IF (NEW.' . $primarykey . ' IS NULL) THEN'
       
. chr(13) . 'NEW.' . $primarykey . '= GEN_ID(GEN_' . $tablename . '_PK, 1);'
       
. chr(13) . 'END');
}
?>

Usage: <?php generate_autoincrement('table','column name'); ?>
felixlee at singnet dot com dot sg 02-Jul-2003 11: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 07: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 02: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 11: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 bg_idol@hotmail.com
 
$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 06-Aug-2000 07: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 !

 
show source | credits | sitemap | contact | advertising | mirror sites