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> <input_name_to_filter
[edit] Last updated: Mon, 01 Nov 2010

view this page in

XLII. Fonctions Firebird/InterBase

Introduction

Firebird/InterBase est une base de données relationnelles offrant la plus part des fonctionnalités décrites dans la norme ANSI SQL-92, qui fonctionne sous environnements Linux, Windows, et la plus part des systèmes Unix. Firebird/InterBase offre une excellente simultanéité, de hautes performances et un langage efficace pour l'écriture des procédures stockées et des triggers. Il est utilisé sur des systèmes de production depuis 1981.

Interbase est le nom de la variante commerciale de cette base de données créée par Borland/Inprise. Pour plus d'informations sur Interbase, allez à http://www.borland.com/interbase/.

Firebird est un projet commerciallement indépendant de programmeurs C et C++, conseillés techniques, supportant le développement et assurant la compatibilité multi-plate-forme de la base de données relationnelle basé sur le code source offert par Inprise Corp (maintenant connu sous le nom de Borland Software Corp) sous la licence InterBase Public License v.1.0 le 25 Juillet 2000. Pour plus d'informations sur Firebird, allez à http://www.firebirdsql.org/.

Note : Cette extension supporte Interbase version 5 et suivante ainsi que toutes les versions de Firbird. Le support d'Interbase version 5.x sera supprimé dans PHP 5.

Cette base de données utilise les guillemets simples (') pour échapper les caractères, un peu comme le fait Sybase. Ajoutez à votre fichier php.ini la directive suivante :

Exemple 1. Configuration InterBase

magic_quotes_sybase = On

Installation

Pour activer le support de ibase, vous devez compiler PHP avec l'option --with-interbase[=DIR].

Note aux utilisateurs Win32 : Afin d'activer ce module dans l'environnement Windows, vous devez copier les bibliothèques gds32.dll depuis le dossier DLL de PHP/Win32 dans le dossier système SYSTEM32 de votre machine (par exemple : C:\WINNT\SYSTEM32 ou C:\WINDOWS\SYSTEM32). Dans le cas où vous auriez installé le serveur de base de données InterBase sur la même machine qui exploite PHP, vous aurez déjà ces DLL de prêtes. Par conséquent, vous n'avez pas à copier la bibliothèque gds32.dll.

Configuration à l'exécution

Le comportement de ces fonctions est affecté par la configuration dans le fichier php.ini.

Tableau 1. Options de configuration

NomPar défautModifiableHistorique
ibase.allow_persistent"1"PHP_INI_SYSTEM 
ibase.max_persistent"-1"PHP_INI_SYSTEM 
ibase.max_links"-1"PHP_INI_SYSTEM 
ibase.default_dbNULLPHP_INI_SYSTEMDisponible depuis PHP 5.0.0.
ibase.default_userNULLPHP_INI_ALL 
ibase.default_passwordNULLPHP_INI_ALL 
ibase.default_charsetNULLPHP_INI_ALLDisponible depuis 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 
Pour plus de détails sur les constantes PHP_INI_*, reportez-vous à Annexe G.

Voici un éclaircissement sur l'utilisation des directives de configuration.

ibase.allow_persistent booléen

Accepte ou non les connexions persistantes à Firebird/Interbase.

ibase.max_persistent entier

Le nombre maximal de connexions persistantes Firebird/Interbase par processus. Les nouvelles connexions avec ibase_pconnect() ne seront pas persistantes si ce nombre maximal est atteint.

ibase.max_links entier

Le nombre maximal de connexions Firebird/Interbase par processus, incluant les connexions persistantes.

ibase.default_db chaîne de caractères

Le nom de la base de données par défaut lorsque ibase_[p]connect() est appelé sans base de données spécifique. Si cette valeur est définie et que le mode sécurisé (safe mode) SQL est activé, aucune connexion à d'autres bases de données que celle-ci ne sera autorisé.

ibase.default_user chaîne de caractères

Le nom d'utilisateur utilisé lors de la connexion à la base de données lorsque aucun n'est spécifié.

ibase.default_password chaîne de caractères

Le mot de passe utilisé lors de la connexion à la base de données lorsque aucun n'est spécifié.

ibase.default_charset chaîne de caractères

Le jeux de caractères utilisé lors de la connexion à la base de données lorsque aucun n'est spécifié.

ibase.timestampformat chaîne de caractères

ibase.dateformat chaîne de caractères

ibase.timeformat chaîne de caractères

Ces directives sont utilisées pour définir les formats de dates et d'heures qui seront utilisés lorsque des dates/heures seront retournées d'un jeux de résultat, ou lors de traitement d'arguments en paramètres dates/heures.

Constantes pré-définies

Ces constantes sont définies par cette extension, et ne sont disponibles que si cette extension a été compilée avec PHP, ou bien chargée au moment de l'exécution.

Les constantes suivantes peuvent être passées à la fonction ibase_trans() pour spécifier le comportement du traitement.

Tableau 2. Constantes Firebird/InterBase

ConstanteDescription
IBASE_DEFAULT Définit le comportement par défaut. Ce comportement est déterminé par la bibliothèque cliente, qui est définie comme IBASE_WRITE|IBASE_CONCURRENCY|IBASE_WAIT dans la plus part des cas.
IBASE_READDémarre une transaction en lecture seul
IBASE_WRITEDémarre une transaction en lecture / écriture
IBASE_CONSISTENCY Démarre une transaction avec le niveau d'isolation définie à 'consistency', ce qui signifie que le transaction courante ne peut lire depuis des tables qui ont été modifiées par d'autres transactions.
IBASE_CONCURRENCY Démarre une transaction avec le niveau d'isolation définie à 'concurrency' (ou 'snapshot'), ce qui signifie que la transaction peut accéder à toutes les tables, mais ne peut pas voir les modifications apportées par d'autres transactions une fois que la transaction a débutté.
IBASE_COMMITTED Démarre une transaction avec le niveau d'isolation définie à 'read committed'. Ce flag doit être associé avec soit la constante IBASE_REC_VERSION, soit la constante IBASE_REC_NO_VERSION. Ce niveau d'isolation vous permet d'accéder aux modifications effectuées après le début de la transaction. Si la constante IBASE_REC_NO_VERSION est spécifiée, seulement la dernière version des lignes pourra être lue. Si la constante IBASE_REC_VERSION est spécifiée, une ligne peut toujours être lue lorsqu'une modification est en attente dans une transaction concurrente.
IBASE_WAIT Indique que la transaction peut attendre, puis réessayer lorsqu'un conflit apparaît.
IBASE_NOWAIT Indique que la transaction échouera immédiatement lorsqu'un conflit apparaît.

Les constantes suivantes peuvent être passées aux fonctions ibase_fetch_row(), ibase_fetch_assoc() ou ibase_fetch_object() pour spécifier leurs comportements.

Tableau 3. Constantes Firebird/InterBase

ConstanteDescription
IBASE_FETCH_BLOBS Aussi disponible sous le nom IBASE_TEXT pour des raisons de compatiblité ascendante. Permet de lire le contenu d'un BLOB 'inline' au lieu de le parcourir en utilisant un identifiant de BLOB.
IBASE_FETCH_ARRAYS Permet de lire un tableau 'inline'. Sinon, les identifiants de tableaux sont retournés. Les identifiants de tableaux ne peuvent être passés uniquement comme arguments aux requêtes INSERT, car aucune fonction pour traiter les identifiants de tableaux n'est actuellement disponible.
IBASE_UNIXTIME Permet de retourner les champs date et heure non pas comme des chaînes de caractères mais comme des timestamps UNIX (le nombre de secondes depuis l'époque UNIX, qui est le 1-Jan-1970 0:00 UTC). Cela peut être problèmatique si vous utilisez des dates antérieures à 1970 sur quelques systèmes.

Les constantes suivantes sont utilisées pour passer des requêtes et des options à l'API (ibase_server_info(), ibase_db_info(), ibase_backup(), ibase_restore() et ibase_maintain_db()). Merci de consulter le manuel Firebird/InterBase pour plus d'informations sur la significations de ces 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 de 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 de 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 de ibase_maintain_db()

IBASE_STS_DATA_PAGES

IBASE_STS_DB_LOG

IBASE_STS_HDR_PAGES

IBASE_STS_IDX_PAGES

IBASE_STS_SYS_RELATIONS

Options de 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 de ibase_server_info()

Table des matières
ibase_add_user --  Ajoute un utilisateur à une base de données de sécurité (uniquement pour IB6 ou plus récent)
ibase_affected_rows --  Retourne le nombre de lignes affectées par la dernière requête iBase
ibase_backup --  Effectue une sauvegarde de base de données InterBase
ibase_blob_add --  Ajoute des données dans un BLOB iBase fraîchement créé
ibase_blob_cancel --  Annule la création d'un BLOB iBase
ibase_blob_close --  Ferme un BLOB ibase
ibase_blob_create --  Crée un BLOB iBase pour ajouter des données
ibase_blob_echo --  Affiche le contenu d'un BLOB iBase au navigateur
ibase_blob_get --  Lit len octets de données dans un BLOB iBase ouvert
ibase_blob_import --  Crée un BLOB iBase, y copie un fichier et le referme
ibase_blob_info --  Retourne la taille d'un BLOB iBase et d'autres informations utiles
ibase_blob_open --  Ouvre un BLOB iBase pour récupérer des parties de données
ibase_close --  Ferme une connexion à une base de données Interbase
ibase_commit_ret -- Valide une transaction iBase sans la refermer
ibase_commit -- Valide une transaction iBase
ibase_connect --  Ouvre une connexion à une base de données InterBase
ibase_db_info --  Demande des statistiques sur une base de données Interbase
ibase_delete_user --  Efface un utilisateur d'une base de données de sécurité (uniquement pour IB6 ou plus récent)
ibase_drop_db --  Supprime une base de données iBase
ibase_errcode --  Retourne le code d'erreur iBase
ibase_errmsg --  Retourne un message d'erreur
ibase_execute -- Exécute une requête iBase préparée
ibase_fetch_assoc --  Récupère une ligne du résultat d'une requête dans un tableau associatif
ibase_fetch_object -- Lit une ligne dans une base Interbase dans un objet
ibase_fetch_row -- Lit une ligne dans une base Interbase
ibase_field_info -- Lit les informations sur un champ iBase
ibase_free_event_handler --  Libère un gestionnaire d'événements iBase
ibase_free_query --  Libère la mémoire réservée par une requête préparée
ibase_free_result -- Libère un résultat iBase
ibase_gen_id --  Incrémente le générateur donné et retourne sa nouvelle valeur
ibase_maintain_db --  Exécute une commande de maintenance sur une base de données Interbase
ibase_modify_user --  Modifie un utilisateur dans une base de données de sécurité (uniquement pour InterBase6 ou plus récent)
ibase_name_result --  Assigne un nom à un jeu de résultats iBase
ibase_num_fields --  Retourne le nombre de colonnes dans un résultat iBase
ibase_num_params --  Retourne le nombre de paramètres dans une requête préparée iBase
ibase_param_info --  Retourne des informations à propos d'un paramètre dans une requête préparée iBase
ibase_pconnect --  Ouvre une connexion persistante à une base de données InterBase
ibase_prepare --  Prépare une requête iBase pour lier les paramètres et l'exécuter ultérieurement
ibase_query -- Exécute une requête sur une base iBase
ibase_restore --  Restaure une sauvegarde de base de données Interbase
ibase_rollback_ret -- Annule une transaction sans la refermer
ibase_rollback -- Annule une transaction iBase
ibase_server_info --  Demande des informations sur le serveur Interbase
ibase_service_attach --  Connexion au service de gestion Interbase
ibase_service_detach --  Déconnexion du service de gestion Interbase
ibase_set_event_handler --  Enregistre une fonction de callback sur un événement iBase
ibase_timefmt --  Fixe le format de date pour les prochaines requêtes
ibase_trans -- Prépare une transaction iBase
ibase_wait_event --  Attend un événement iBase


ibase_add_user> <input_name_to_filter
[edit] Last updated: Mon, 01 Nov 2010
 
add a note add a note User Contributed Notes Fonctions 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