|
ibase_query
Execute a query on an InterBase database
(PHP 4, PHP 5)
Parameters
Return Values
If the query raises an error, returns
Note:
In PHP 5.0.0 and up, this function will return the number of rows
affected by the query for INSERT, UPDATE and DELETE statements. In order
to retain backward compatibility, it will return Errors/ExceptionsIf you get some error like "arithmetic exception, numeric overflow, or string truncation. Cannot transliterate character between character sets" (this occurs when you try use some character with accents) when using this and after ibase_query() you must set the character set (i.e. ISO8859_1 or your current character set). ExamplesExample 687. ibase_query() example<?php Code Examples / Notes » ibase_queryeric_cavalcanti
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); senortz senortz
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 ..." chrisg
Simple function to retrieve the results of an SQL statement into an array, will also cater for BLOB fields: 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; } apolenary
In woking time ibase_qury() and ibase_fetch_row() with many time call thei arise the ERROR -> Fatal error: Maximum execution time of 30 seconds exceeded ERROR arise in that script: foreach ($vidtr_list as $vidtr) { foreach ($branches_train as $from) { foreach ($branches_train as $to) { if (isset($pricelst_train[$vidtr][$from][$to]['ID'])) { for ($i = 1; $i < 7; $i++) { $id = $pricelst_train[$vidtr][$from][$to]['ID']; $sql_v = "SELECT * FROM P_GET_PRICE_C_VES('$id','$std_train1_ves[$i]')"; $query_rez = ibase_query($db,$sql_v) or die(ibase_errmsg()); $prc_v = ibase_fetch_row($query_rez); $sql_o = "SELECT * FROM P_GET_PRICE_C_OBYOM('$id', '$std_train1_obyom[$i]')"; $query_rez = ibase_query($db,$sql_o) or die(ibase_errmsg()); $prc_o = ibase_fetch_row($query_rez); if (isset($prc_o[0])) { $c_obyom = $prc_o[0]; $c_ves = $prc_v[0]; $prices_train[$id][$i] = array( 'OBYOM' => $c_obyom,'VES' => $c_ves ); $mysql_jde_price[$cnt_price] = "INSERT INTO jde_price VALUES (default, '$id', '$std_train1_ves[$i]', '$c_ves', '$std_train1_obyom[$i]', '$c_obyom');"; $cnt_price++; } } } } } } How I can decide that Error? akach
If you use ibase_query() for SELECT without fetching result then you must know that SELECT isn't actually executed. E.g. you perform "SELECT MY_UDF(param) from RDB$DATABASE" - MY_UDF isn't actually called until you fetch result. This is a feature(or bug) of php interbase drivers, not interbase/firebird itself. Test conditions: firebird 1.5.2, php 4. elf
A BLOB can be fetched easily adding IBASE_TEXT parameter to the ibase_fetch_object() function: $r=ibase_query("select BLOB from BLOBS where BLOB_ID=1"); $d=ibase_fetch_object($r,IBASE_TEXT); and it will fetch the BLOB as a text. Thus it referres to it like this: $d->BLOB *** ELF *** escoric
/* If your work environment is windows */ $link=ibase_connect ($path, $usuario, $password, 'WIN1251'); |
Change Language![]() ibase_add_user ibase_affected_rows ibase_backup ibase_blob_add ibase_blob_cancel ibase_blob_close ibase_blob_create ibase_blob_echo ibase_blob_get ibase_blob_import ibase_blob_info ibase_blob_open ibase_close ibase_commit_ret ibase_commit ibase_connect ibase_db_info ibase_delete_user ibase_drop_db ibase_errcode ibase_errmsg ibase_execute ibase_fetch_assoc ibase_fetch_object ibase_fetch_row ibase_field_info ibase_free_event_handler ibase_free_query ibase_free_result ibase_gen_id ibase_maintain_db ibase_modify_user ibase_name_result ibase_num_fields ibase_num_params ibase_param_info ibase_pconnect ibase_prepare ibase_query ibase_restore ibase_rollback_ret ibase_rollback ibase_server_info ibase_service_attach ibase_service_detach ibase_set_event_handler ibase_timefmt ibase_trans ibase_wait_event |