PHP 5.4.31 Released

ibase_query

(PHP 4, PHP 5)

ibase_queryWykonuje zapytanie w bazie danych Firebird/Interbase

Opis

resource ibase_query ([ resource $identyfikator_połączenia ], string $zapytanie [, int $dowiązywany_argument_1 ] )

Wykonuje zapytanie w bazie danych Firebird/Interbase.

Parametry

identyfikator_połączenia

Identyfikator połączenia do Firebird/Interbase. Jeżeli zostanie pominięty, to użyte będzie istniejące połączenie.

zapytanie

Zapytanie SQL.

dowiązywany_argument_1

Zwracane wartości

Jeśli zapytanie powoduje błąd, funkcja zwraca FALSE. Jeśli zapytanie zostanie pomyślnie wykonane a jego rezultatem będzie (być może pusty) zbiór wynikowy (uzyskany za pomocą SELECT), zwraca identyfikator_wyniku. Jeśli zapytanie zostanie pomyślnie wykonane, a nie powstanie zbiór wynikowy, zwraca TRUE.

Informacja:

W PHP 5.0.0 i nowszych wersjach ta funkcja zwraca liczbę wierszy przetworzonych przez ostatnie zapytanie (instrukcje INSERT, UPDATE lub DELETE). W celu zachowania zgodności z poprzednimi wersjami funkcja zwraca TRUE dla prawidłowo wykonanych zapytań, w których nie były przetwarzane wiersze.

Błędy/Wyjątki

Jeżeli są zwracane błędy takie jak "arithmetic exception, numeric overflow, or string truncation. Cannot transliterate character between character sets" (to może się zdarzyć w przypadku użycia niektórych znaków narodowych) po użyciu funkcji ibase_query(), to należy ustawić kodowanie znaków (np. ISO8859_2, WIN1250, UTF8).

Rejestr zmian

Wersja Opis
5.3.1 W przypadku powodzenia funkcja zwraca obecnie TRUE jeśli nie były przetworzone żadne wiersze. W poprzednich wersjach PHP funkcja zwracała 0 (zero i spację).

Przykłady

Przykład #1 Przykład ibase_query()

<?php

$host 
'localhost:alias_bazy_danych';

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

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

?>

Zobacz też:

add a note add a note

User Contributed Notes 4 notes

up
2
escoric at latinmail dot com
9 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