|
ibase_query
Execute a query on an InterBase database
(PHP 4, PHP 5)
Example 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 Languageibase_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 |