Autor Zpráva
Enko
Profil
Ahoj,
mám zprovozněný přístup do MSSQL databáze přes ODBC, které funguje bezvadně. Rozhodl jsem se na práci s databází implementovat Dibi. Všechno mi funguje bezvadně, jen nejsem schopný zjistit počet řádků, viz obdoba funkce mysql_num_rows.
Mám to udělané přesně podle návodu, ale vždy mi vrací nulu, i když na základě stejného dotazu vypíšu několik záznamů.

Můj kód:
        //dotaz do MSSQL
        $res = dibi::query("SELECT * FROM Assets WHERE Serial_Num LIKE %~like~", $sn);
        
        //zjisteni poctu radku, vzdy vraci mulu
        $count = count($res);
        echo $count . "<br><br>";
         
          //zde mam pro kontrolu vypis dat, data se zde vypíšou i když $count vypíše nulu
          while($row = $res->fetch()){
            print_r($row);
            echo "<br>";
          }

Napadá někoho, proč mi $count vždy vrací nulu?
Taps
Profil
Enko:
funkce
<?
mssql_num_rows();
?>
nefunguje ?
Alphard
Profil
Enko [#1]:
V $res je určitá forma ukazatele. Skutečné pole se (interní iterací nad sadou výsledků) získá po zavolání metody fetchAll() nebo ekvivalentní. Pak by šlo použít count().

Taps [#2]:
Přímé použití je nepřijatelné, muselo by se implementovat do dibi pod nějakou obálkovou funkcí, jestli tam dosud není.
Enko
Profil
Taps:
Fungovalo by, kdyžbych nepoužíval Dibi

Alphard:
Ano, s tím fetchAll() to funguje. Děkuji. Ovšem narazil jsem na další, zádrzhel a díky v podstatě žádné dokumentaci nejsem schopen vyřešit. Poté, co si zjistím počet výsledků, pro příklad $count, tak se zjevně vyprázdní z paměti celá $res viz můj příklad a pokud chci pokračovat ve výpisu výsledků, tak si musím znovu položit dotaz do databáze pro znovunačtení výsledků. Ovšem toto se mi nezdá jako úplně vhodné. Má s tím někdo nějakou zkušenost jak to vyřešit jen jedním dotazem?
Alphard
Profil
Metoda fetchAll() vrátí výsledek uložený v poli, to jsou snad ty nejzákladnější příklady. Pak stačí projít přes foreach. (V důsledku se sada dat prochází 2x a zabere nějakou paměť, takže pro extrémně objemný výpis by verze [#1] byla mírně rychlejší, ale ten rozdíl je minimální.)
Jan Tvrdík
Profil
$res->getRowCount()

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: