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?
ibase_query
(PHP 4, PHP 5)
ibase_query — Wykonuje zapytanie w bazie danych Firebird/Interbase
Opis
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).
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ż:
- ibase_errmsg() - Zwraca tekst komunikatu błędu
- ibase_fetch_row() - Pobiera wiersz wyniku zapytania w postaci tablicy numerycznej
- ibase_fetch_object() - Pobiera wiersz wyniku zapytania w postaci obiektu
- ibase_free_result() - Zwalnia pamięć zajmowaną przez wynik
ibase_query
31-May-2006 01:20
28-Jul-2005 11:18
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.
17-Aug-2004 05:43
/* If your work environment is windows */
$link=ibase_connect ($path, $usuario, $password, 'WIN1251');
04-Jun-2004 06:57
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;
}
?>
24-Jul-2003 11:18
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 ..."
28-Mar-2002 08:18
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 ***
19-Jan-2002 08:11
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);
