| Autor | Zpráva | ||
|---|---|---|---|
| Enko Profil |
#1 · Zasláno: 18. 3. 2014, 16:41:16
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 |
#2 · Zasláno: 18. 3. 2014, 19:30:55
Enko:
funkce <? mssql_num_rows(); ?> |
||
| Alphard Profil |
#3 · Zasláno: 18. 3. 2014, 20:08:40
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 |
#4 · Zasláno: 20. 3. 2014, 14:15:46
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 |
#5 · Zasláno: 20. 3. 2014, 16:21:41
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 |
#6 · Zasláno: 20. 3. 2014, 22:33:31
$res->getRowCount() |
||
|
Časová prodleva: 12 let
|
|||
0