interbase: количество строк в ответе?

edi

Новичок
interbase: количество строк в ответе?

есть возможность узнать количество строк в результате запроса?
 

Макс

Старожил PHPClub
PHP:
$i = 0; 
while ($r = ibase_fetch_assoc($res)) { $i++; }
результат будет в $i

если ты ищешь аналог mysql_num_rows то в ibase-экстеншене его нет. Автор этого расширения написал функция, но она имеет свои ограничения и (по-моему) стандартном пхп не поддерживается.
Он там такой комментарий дал :
PHP:
   /**
    * As this function relies on the InterBase API function isc_dsql_sql_info()
    * which has a couple of limitations (which I hope will be fixed in future 
    * releases of Firebird), this function is fairly useless. I'm leaving it
    * in place for people who can live with the limitations, which I only 
    * found out about after I had implemented it anyway.
    *
    * Currently, there's no way to determine how many rows can be fetched from
    * a cursor. The only number that _can_ be determined is the number of rows
    * that have already been pre-fetched by the client library. 
    * This implies the following:
    * - num_rows() always returns zero before the first fetch;
    * - num_rows() for SELECT ... FOR UPDATE is broken -> never returns a
    *   higher number than the number of records fetched so far (no pre-fetch);
    * - the result of num_rows() for other statements is merely a lower bound 
    *   on the number of records => calling ibase_num_rows() again after a couple
    *   of fetches will most likely return a new (higher) figure for large result 
    *   sets.
    */
 

edi

Новичок
мда, хотелось бы аналог.
а вообще я делаю следующее:
есть некая таблица. В ней надо проапдэйтить строку. Причем если в результате апдэйта изменений небыло(нет строки удовлетворяющей разделу where) то надо добавить эту строку. Как такое можно сделать в интербазе не прибегая к проверочному селекту?

P.S.
php версии 5 не предлагать
 

tony2001

TeaM PHPClub
есть некая таблица. В ней надо проапдэйтить строку. Причем если в результате апдэйта изменений небыло(нет строки удовлетворяющей разделу where) то надо добавить эту строку. Как такое можно сделать в интербазе не прибегая к проверочному селекту?
а что, REPLACE там нет?
 

flipper

Guest
наверное всё таки надо делать проверочный Select по where условию, а затем делать Update или Insert в зависимости от результата Select-a...
 

neko

tеam neko
что характерно автор вопроса не указал версии ibase
 

edi

Новичок
интербэйз версии 6.
говорят что в firebird 1.5 есть команда count_rows
но переход на другой пхп или интербэйз не в моей власти.
ладно, обойдемся и без этого
всем спасибо за участие.
 
Сверху