Autor Zpráva
24_h
Profil *
Vloženo uživatelem: 24_h - uživatel již zaslal 1 příspěvků (IP uloženo)
Datum: 25. 05. 2008 08:24


Zdravím všechny,
řeším takový malý zádrhel s finkcí mysql_data_seek:

mysql_select_db($database_sc2008, $sc2008);
$query_CN = "SELECT userID, cn FROM users";
$CN = mysql_query($query_CN, $sc2008) or die(mysql_error());
$row_CN = mysql_fetch_assoc($CN);
$totalRows_CN = mysql_num_rows($CN);


do{
$databaseCN[]=$row_CN['cn'];
}while($row_CN = mysql_fetch_assoc($CN));
unset($databaseCN);

mysql_data_seek($CN,0);

do{
$databaseCN10[]=$row_CN['cn'];
}while($row_CN = mysql_fetch_assoc($CN));


Problém je, že po seeku to vygeneruje pole s indexi posunutými o jedno, kde, index [0] je při druhém průchodu prázdný. Nevíte, kde je problém?
bukaj
Profil
24_h
Problém je, že po seeku to vygeneruje pole s indexi posunutými o jedno, kde, index [0] je při druhém průchodu prázdný.
Pří posledním průchodu prvním cyklem do se do $row_CN['cn'] uloží FALSE ve while podmínce. Musíš tedy $row_CN['cn'] znovu inicializovat, než vejdeš do druhého cyklu.
$row_CN = mysql_fetch_assoc($CN); // první inicializace - pro první cyklus
$totalRows_CN = mysql_num_rows($CN);

do{
$databaseCN[]=$row_CN['cn'];
}while($row_CN = mysql_fetch_assoc($CN));
unset($databaseCN);

mysql_data_seek($CN,0);

$row_CN = mysql_fetch_assoc($CN); // druhá - pro cyklus druhý

do{
$databaseCN10[]=$row_CN['cn'];
}while($row_CN = mysql_fetch_assoc($CN)); 


Nebo použít cyklus while, který je pro toto vhodnější (nemusí se provádět prvotní inicializace). Viz příklad v manuálu k mysql_fetch_assoc().
Mastodont
Profil
do{
$databaseCN[]=$row_CN['cn'];
}while($row_CN = mysql_fetch_assoc($CN));
unset($databaseCN);

Jen takový dotaz - jaký význam má plnit pole a ihned poté ho zrušit?
24_h
Profil *
..no to bylo samozřejmě vytrženo z kodu, plním ho znovu až po pužití v tom prvním cyklu dále někde v kódu, kde jsem se odvolovála na index, tak mě to potrápilo..
24_h
Profil *
@bukaj: díky za vysvětlení !

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: