PHP 5.4.31 Released

ibase_connect

(PHP 5)

ibase_connectOuvre une connexion à une base de données

Description

resource ibase_connect ([ string $database [, string $username [, string $password [, string $charset [, int $buffers [, int $dialect [, string $role [, int $sync ]]]]]]]] )

Ouvre une connexion à une base de données Firebird/InterBase.

Si un deuxième appel est fait avec ibase_connect(), en passant les mêmes arguments, une nouvelle connexion ne sera pas ouverte, mais la connexion déjà ouverte sera retournée. La connexion sera fermée dès que le script se termine, à moins qu'elle ne soit fermée explicitement avec ibase_close(), durant le script.

Liste de paramètres

database

database doit être un chemin valide jusqu'à un fichier de base de données sur le serveur sur lequel il réside. Si le serveur est distant, il faut le préfixer avec un nom d'hôte 'hostname:' (TCP/IP) ou '//hostname/' (NetBEUI) en fonction du protocole de communication utilisé.

username

Le nom d'utilisateur. Peut être défini avec la directive ibase.default_user du fichier php.ini.

password

Le mot de passe correspondant à l'utilisateur username. Peut être défini avec la directive ibase.default_password du fichier php.ini.

charset

charset est le jeu de caractères par défaut pour la base de données.

buffers

buffers est le nombre de buffer de base à allouer pour le cache serveur. S'il est passé à 0 ou omis, le serveur le choisira de lui-même.

dialect

dialect sélectionne le dialecte SQL pour les requêtes exécutées avec cette connexion et, par défaut, il utilise le meilleur dialecte disponible.

role

Ne fonctionne qu'avec InterBase 5 et supérieur.

sync

Valeurs de retour

Retourne un identifiant de connexion Firebird/InterBase en cas de succès, ou FALSE si une erreur survient.

Erreurs / Exceptions

Si vous avez quelques erreurs comme "arithmetic exception, numeric overflow, or string truncation. Cannot transliterate character between character sets" (cela se produit lorsque vous tentez d'utiliser quelques caractères accentués) lorsque vous utilisez ibase_connect() et après ibase_query(), vous devez spécifier un jeu de caractères correct (i.e. ISO8859_1 ou votre jeu de caractères courant).

Exemples

Exemple #1 Exemple avec ibase_connect()

<?php
$host 
'localhost:/path/to/your.gdb';

$dbh ibase_connect($host$username$password);
$stmt 'SELECT * FROM tblname';
$sth ibase_query($dbh$stmt);
while (
$row ibase_fetch_object($sth)) {
    echo 
$row->email"\n";
}
ibase_free_result($sth);
ibase_close($dbh);
?>

Voir aussi

  • ibase_pconnect() - Ouvre une connexion persistante à une base de données InterBase
  • ibase_close() - Ferme une connexion à une base de données Interbase

add a note add a note

User Contributed Notes 6 notes

up
1
ag at dividi dot de
8 years ago
With php5 on Windows i couldnt connect to a firebird database with following error :

Warning: ibase_connect(): Unable to complete network request to host "localhost"
. Failed to locate host machine. Undefined service gds_db/tcp.  in C:\\wamp\\php\\ibase.php on line 5

the connect command was "$dbh = ibase_connect ("localhost:path_to_file.fdb", $username, $password);"

The solution is to insert the line
gds_db    3050/tcp    #firebird Database
into the windows services file %WINDIR%\\system32\\drivers\\etc\\services
up
0
fb dot bird at gmail dot com
6 years ago
Remember for different locations
of php.ini file:

..\xampp\php\php.ini
..\xampp\apache\bin\php.ini
..\xampp\php\php4\php.ini

Please do not confuse this
and know location _loaded_ *.ini-file!
up
0
Robert Silvia
9 years ago
Just to update Simon's note...

Things must have been fixed since Simon wrote that note.
With PHP5 the following example works flawlessly:

$strconnect = 'localhost:/opt/firebird/examples/employee.fdb';

if (!($db=ibase_connect($strconnect, 'sysdba', 'yourpass', 'ISO8859_1', 0, 1)))
    die('Could not connect: ' .  ibase_errmsg());

  $sql  = "SELECT PO_NUMBER, ORDER_STATUS, ITEM_TYPE FROM SALES";
  $cursor = ibase_query($sql);
  $row_array = ibase_fetch_row($cursor);
  
  print_r($row_array);

  ibase_free_result($cursor);
  ibase_close($db);

Also you CAN get away with the following connection string:
ibase_connect('/opt/firebird/examples/employee.fdb', 'sysdba', 'yourpass')
up
0
simon at thorndancer dot com
11 years ago
I found it difficult to get anything working using the current documentation.
While logic would suggest that the format in the docs should work (being based on all the
syntax of other standard database access functions) I had problem after problem. Finally I
found some comments on a newgroup that helped, and this is the result.

This is actual production code (not a mere example). It works.
Don't ask me why it is so different from the official docs.

if ( ibase_connect( $db_filespec,$db_user,$db_pass_word) )
{
    $query  = "SELECT c.id, c.title, c.description ";   
    $query .= "FROM collections c ";  
    $query .= "WHERE (c.id = $page_id) ";                                      

    $result = ibase_query( $query );

    $row_array = ibase_fetch_row($result);

    $row_fetched = !empty($row_array);

    if ($row_fetched)     
    {                    
       // Extract the row into variables

        $collection_id   = $row_array[0];           
       $edit_title      = $row_array[1];           
       $edit_desc       = $row_array[2];           

       // Standardise the record contents

        $collection_id   = $collection_id + 0;      // force type to numeric
     }

    // Wrap up the database side of things

     ibase_commit();     // note parenthesis but no parameters.

     ibase_close;        // note total lack of parenthesis and parameters !
}
       
You'll notice that there is no reference to a database handle in this code.
It seems to be implicit when dealing with interbase functions. Certainly, I couldn't
get the code to work when using it explicitly. This makes the documentation
very hard to work with, and any reference to a handle needs to be ignored.

Important: ibase_close doesn't work for me if I put parenthesis after it.
eg:
        ibase_close;        // works
        ibase_close();      // fails
        ibase_close($db);   // fails
       
Note: the line "if ($row_fetched)" could be replaced with "while ($row_fetched)"
if you need to process more than one record.

All that said, Interbase is a fantastic database to work with and IMHO a much
better choice than something like PostgreSQL if you need to move up from MySQL
to something more industrial strength. Just be sure to RTFM.
up
0
anthony at trams dot com
13 years ago
If you get a message like: 'Dynamic SQL Error SQL error code = -901 feature is not supported', this may be caused by InterBASE client 6.01 accessing a server running 5.x.

Make sure the dialect value is set to '1', like the following:

ibase_connect ('localhost:/usr/db/db.gdb', 'SYSDBA', 'masterkey', 'ISO8859_1', '100', '1' ) ;

That last value is the dialect, but you need the two preceding also, do avoid errors.


Anthony
up
-1
sam at intranex.ru
9 years ago
If you get a sloooow work of ibase_connect on Win2003, try to update your FireBird to version 1.5 or above, and your InterBase to version 7.1. Or move back to Win2000 :)
To Top