Temos pavadinimas: WordPress, Shopify ir PHPFusion programuotojų bendruomenė :: CIKLAS + FOREACH()

Parašė Kelmas· 2010 Kov. 19 17:03:30
#1

Sveiki visi!

Berašant savo TVS iškilo problema kurios niekaip neįsprendžiu. Tai einam prie temos.

Turiu pasirašęs db_query() funkcija kuri ne tik atlieka UŽKLAUSA, bet ir sudaro CIKLA ir SUKEŠUOJA turinį.

$query = db_query(....);
$text = ....;

foreach ($query as $row) {
    $text .= $row['......'];
}

echo $text;



Toks kodas labai gerai suveikia.

$query = db_query("SELECT SQL_CACHE * FROM `main_settings`");

foreach ($query as $data) {
   $settings[$data['settings_name']] = $data['settings_value'];
}




O toks kodas neveikia! Iš niekur gaunu ne į tema klaida!

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /var/www/xxxxxxxxxx on line xxxxxx

Bet esmė, kad vistiek sudaro masyvą ir viskas OK. Tik plius išmeta šita klaidą. Įdomu dėl ko?

Visiems iškart ačiū už atsakymus!

Redagavo Kelmas· 2010 Kov. 19 17:03:03

Parašė nbanba· 2010 Kov. 19 18:03:08
#2

O jei pamėgintum su while, o ne forearch:
while ($data = mysql_fetch_assoc($query))

:?

Parašė Kelmas· 2010 Kov. 19 18:03:58
#3

nbanba parašė:
O jei pamėgintum su while, o ne forearch:
while ($data = mysql_fetch_assoc($query))

:?


Turiu pasirašęs db_query() funkcija kuri ne tik atlieka UŽKLAUSA, bet ir sudaro CIKLA ir SUKEŠUOJA turinį.

Kitaip tariant tavo ciklą jau seniai sudaro. Čia reikia labai įsiskaityti į mano variantą, kad suprastum.

Redagavo Kelmas· 2010 Kov. 19 18:03:30

Parašė ibodom· 2010 Kov. 19 22:03:24
#4

o jei naudotum _fetch_array() ? visada jį naudoju ir jokių problemų. o dėl tavo atvejo, negali būt sql'e kažkokie neatitikimai? funkcija šita case-sensitive .

Parašė Kelmas· 2010 Kov. 19 22:03:32
#5

iBodom parašė:
o jei naudotum _fetch_array() ? visada jį naudoju ir jokių problemų. o dėl tavo atvejo, negali būt sql'e kažkokie neatitikimai? funkcija šita case-sensitive .


Tai jau antra kartą kartoju, kad jis ir yra naudojamas. Jus išviso žinot kas yra ciklas + kešavimas? :]

db_query(QUERY, TIME = 0)
1) mysql_query()
2) mysql_fetch_assoc()
3) (TIME > 0 && QUERY != UPDATE/DELETE/INSERT) fopen/fwrite/flock/fclose

P.S tavo variantas nekeičia sitaucijos..

Redagavo Kelmas· 2010 Kov. 19 22:03:57

Parašė ibodom· 2010 Kov. 19 22:03:17
#6

tai yra taip : viskas gerai, viską įvygdo, tik meta klaida? wtf?

Parašė Kelmas· 2010 Kov. 19 22:03:07
#7

iBodom parašė:
tai yra taip : viskas gerai, viską įvygdo, tik meta klaida? wtf?


Taip, tik ne klaidą, bet įspėjimą. Tik nesiūlykit variantu su "slepimu".

Parašė ozzWANTED· 2010 Kov. 20 01:03:43
#8

visų pirma yra toks dalykas kaip dbarraynum(dbquery(...),ID);

todėl gali daryti taip:
$uzklausa = dbquery(...);
$dydis = dbrows($uzklausa);
for($i=0;$i<$dydis;$i++) {
 // Į kešą dabar ką nori susikrauni;
 list($settings[$i]['user_id'],$settings[$i]['user_name'] = dbarraynum($uzklausa,$i);
}



Orginalius, ne fusion funkcijų pavadinimus pasiimsi iš maincore.php, jeigu reikia.


$query = db_query("SELECT SQL_CACHE * FROM `main_settings`");

foreach ($query as $data) {
   $settings[$data['settings_name']] = $data['settings_value'];
}



Toks dalykas iš esmės yra neteisingas, dbquery, tik sukelia į atmintį užklausos rezultatą, bet jos niekaip neparodo, nes negalima mysql'o array'aus nuskaityti php array funkcijomis.
dbarray, dbarraynum, paima pirmąją eilutę, tačiau tu gali užklausoje(LIMIT 5,1) arba dbarraynum($uzklausa,5); nurodyti kurią rezultato eilutę nori matyti.

Dar gali su having - "having sum(total_acts) > 15" pasirimti reikiamą rezultatą, jeigu where parametrais neįmanoma.

Tačiau bet kuriuo atveju tau reikia kokios nors array funkcijos.

while funkcija iš tikrųjų veikia tokiu pat pagrindu kaip:
dbarray($uzklausa);
dbarray($uzklausa);
Tiesiog važiuoja rodykle atmintyje po vieną eilutę žemyn.

Foreach galima taikyti, tik tuomet kaip JAU YRA PHP seka, ir tu ją nori pergrupuoti.


----
Dar žinok, kad komanda SELECT SQL_CACHE sth FROM some_tbl
veiks tik jei:
my.cnf faile bus:
query_cache_type = 2

Dababase independent atveju:
SELECT /*! SQL_CACHE */ sth FROM some_tbl

Redagavo ozzWANTED· 2010 Kov. 20 01:03:12

Parašė Kelmas· 2010 Kov. 20 14:03:51
#9

Ačiū už patarimus, bet kai turėsi laiko (ir noro) peržiūrėk mano PM žinutė su mano funkciją ir pamatysi plačiau.

Parašė Kelmas· 2010 Kov. 20 18:03:22
#10

Pabandysiu paaiškinti jums be jokiu funkcijų kaip pas manęs atliekamas šitas dalykas:

<?php
// ATSIMINKITE, ČIA TIK SUPAPRASTINTAS VARIANTAS!

// UŽKLAUSA
$query = mysql_query("SELECT SQL_CACHE * FROM `main_settings`");

// CIKLAS
while ($row = mysql_fetch_assoc($query)) {
  $data[] = $row;
}

// FOREACH'AS
foreach ($data as $info) {
  $settings[$info['settings_name']] = $info['settings_value'];
}
?>




Gal dabar aiškiau..

Redagavo Kelmas· 2010 Kov. 20 18:03:29

Parašė Kelmas· 2010 Kov. 29 19:03:21
#11

Problema seniai išspręsta, o tema rakinama. Įdomumo dėlei klaida buvo mano funkcijoje (reikėjo tik $query pervadinti į $result).