PHP Unconference Europe 2015

ibase_query

(PHP 5)

ibase_queryExécute une requête sur une base iBase

Description

resource ibase_query ([ resource $link_identifier ], string $query [, int $bind_args ] )

Exécute une requête sur une base iBase.

Liste de paramètres

link_identifier

Un identifiant de connexion à InterBase. S'il est omis, la dernière connexion ouverte sera utilisée.

query

Une requête InterBase.

bind_args

Valeurs de retour

Si la requête émet une erreur, la fonction retournera FALSE. Si la requête est exécutée avec succès, et qu'il y a un jeu de résultats (même vide), la fonction retournera un identifiant de résultat. Si la requête est exécutée avec succès, et qu'il n'y a pas de résultat, la fonction retournera TRUE.

Note:

Dans les version 5.0.0 de PHP et suivantes, ibase_query() retourne le nombre d'enregistrements affectés par les requêtes INSERT, UPDATE et DELETE. Dans un souci de compatibilité ascendante, ibase_query() retournera TRUE si la requête réussi mais ne renvoie aucun enregistrement.

Erreurs / Exceptions

Si vous recevez une erreur du type "arithmetic exception, numeric overflow, or string truncation. Cannot transliterate character between character sets" (ceci survient lorsque vous essayez d'utiliser des caractères accentués) avec la fonction ibase_query(), c'est que vous devez choisir un jeu de caractères (i.e. ISO8859_1 ou votre jeu courant).

Historique

Version Description
5.3.1 En cas de succès, cette fonction retourne maintenant TRUE s'il n'y a aucune ligne d'affectée, alors qu'elle retournait auparavant 0 (un zéro suivi d'un espace vide).

Exemples

Exemple #1 Exemple avec ibase_query()

<?php

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

$dbh ibase_connect($host$username$password);
$stmt 'SELECT * FROM tblname';

$sth ibase_query($dbh$stmt) or die(ibase_errmsg());

?>

Voir aussi

add a note add a note

User Contributed Notes 4 notes

up
2
escoric at latinmail dot com
10 years ago
/* If your work environment is windows */

$link=ibase_connect ($path, $usuario, $password, 'WIN1251');
up
1
chrisg at cordell dot com dot au
10 years ago
Simple function to retrieve the results of an SQL statement into an array, will also cater for BLOB fields:

<?php
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;
}
?>
up
0
SenorTZ senortz at nospam dot yahoo dot com
11 years ago
Two comments on interogating system tables in Interbase or Firebird; I hope it helps.

1. if you try to build a query string to extract data from a system table (that has the form "rdb$some_name"), you should divide the "rdb$some_name" table name in your query string using the string merge operator ".".
$query = "select rdb"."$"."relation_name as TABLE_NAME from rdb"."$"."relations where rdb"."$"."system_flag=0";

2. The second thing is related to the fact that you can later use (after the call to ibase_fetch_object) as field identifier the ALIAS used in the query for the "rdb$some_name" table.

Example:
$get_table_names_query = "select rdb"."$"."relation_name as TABLE_NAME from rdb"."$"."relations where rdb"."$"."system_flag=0";
//
$res_table_names_query = ibase_query($dbconnection, $get_table_names_query);
//
while ($row_table_names = ibase_fetch_object($res_table_names_query))
{
    print($row_table_names->TABLE_NAME);//alias used
}

Editor's note:
it is easier to use a backslash to protect the $-sign.
eg. "select rdb\$relation_name as TABLE_NAME from ..."
up
0
eric_cavalcanti at hotmail dot com
12 years ago
Using BLOB

Insert BLOB:

/* create blob */
$blob_id = ibase_blob_create();

/* fill blob */
ibase_blob_add($blob_id, $var_datablob);

/* close new blob */
$blob_id_str = ibase_blob_close($blob_id);

/* insert into table  */
ibase_query("INSERT INTO BLOB_TABLE (ID, BLOB) VALUES (1, ?)",$blob_id_str);

Open BLOB:

/* query */
$set = ibase_query("SELECT BLOB FROM BLOB_TABLE WHERE ID = 1");

/* fetche a row */
$row = ibase_fetch_object($set);

/* open BLOB for read */
$blob_id = ibase_blob_open($row->BLOB);

/* get BLOB data */
$stringBLOB = ibase_blob_get($blob_id);

/* print BLOB */
echo $stringBLOB;

/* close new blob */
ibase_blob_close($blob_id);

/* free result */
ibase_free_result($set);
To Top