ibase_query

(PHP 5, PHP 7 < 7.4.0)

ibase_queryВыполняет запрос к базе данных InterBase

Описание

ibase_query(resource $link_identifier = ?, string $query, int $bind_args = ?): resource

Выполняет запрос к базе данных InterBase.

Список параметров

link_identifier

Идентификатор ссылки InterBase. Если не указан, предполагается последняя открытая ссылка.

query

Запрос InterBase.

bind_args

Возвращаемые значения

Если запрос вызывает ошибку, возвращает false. В случае успешного выполнения и наличия (возможно, пустого) результирующего набора (например, с запросом SELECT) возвращает идентификатор результата. Если запрос был успешным и результатов не было, возвращает true.

Замечание:

В PHP 5.0.0 и выше эта функция будет возвращать количество строк, затронутых запросом, для операторов INSERT, UPDATE и DELETE. Чтобы сохранить обратную совместимость, она будет возвращать true для этих операций, если запрос выполнен успешно без затрагивания каких-либо строк.

Ошибки

Если вы получаете сообщение об ошибке вроде "arithmetic exception, numeric overflow, or string truncation. Cannot transliterate character between character sets" (это происходит, когда вы пытаетесь использовать какой-либо символ с диакритическими знаками) при использовании этой функции и после использования ibase_query(), вы должны установить символьную кодировку (ISO8859_1 или вашу текущую символьную кодировку).

Примеры

Пример #1 Пример использования 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());

?>

Смотрите также

Добавить

Примечания пользователей 5 notes

up
4
chrisg at cordell dot com dot au
20 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
coladict at gmail dot com
9 years ago
Contrary to it's description, the function does not always execute the query, unless you try fetching the results. I discovered this through the following code:

<?php
$result
= ibase_query($dbh,"SELECT boniid FROM PROC_INS_OBONI_DELIV_ADDBONITM ( ? , ? , ? , ? , null , ? )", $bon_id , $plucode2 , $amount , $note , $discount);
$this->log_add(mb_convert_encoding("SELECT boniid FROM PROC_INS_OBONI_DELIV_ADDBONITM ( " . $bon_id . ", " . $plucode2 . ", " . $amount . ", " . $note . ", " . $nullparent . ", " . $discount . " )",'utf8','cp1251'));

if (!
$result){
$errmsg = ibase_errmsg();
ibase_rollback($dbh);
ibase_close($dbh);

$this->log_add("Item (" . $mid . " - " . $plucode2 . ") : Error returned (" . __LINE__ . "): " . $errmsg);
return
"Error sending product ( $m_name). Error message: $errmsg";
}

// item data does NOT enter the database if I don't call ibase_fetch_assoc
$row = ibase_fetch_assoc($result);
?>

This problem may be limited to FireBird 1.5 or it may not be. Either way, be wary of it.
up
0
escoric at latinmail dot com
20 years ago
/* If your work environment is windows */

$link=ibase_connect ($path, $usuario, $password, 'WIN1251');
up
-1
eric_cavalcanti at hotmail dot com
22 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);
up
-1
SenorTZ senortz at nospam dot yahoo dot com
21 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 ..."
To Top