Autor Zpráva
24k_sick
Profil *
Resim problem s prechazenim z proceduralniho programovani na OOP , mam haluz DB tridu a rad bych to demonstroval na malem priklade. Jedna se o 2 selecty zjistujici pocet clanku

1/ s limitem
2/ bez

pote prichazi na radu cyklus, vytvori se promenna typu fetch_array
a uvnitr cyklu zjistuji dalsim selectem pocet komentaru daneho clanku. Je to pomerne klasicky priklad.
Vim ze by to asi slo 1 selectem, ale jde mi o problematiku ...

Takze pri pouziti proceduralniho programovani vse fungje jak ma a kdyzto zkusim se svoji trapnou tridou , ktera je temer totozna jako trida z knihy od WELLINTONOVE PROGRAMUJEME PROFESIONALNE (3.vyd.) tak to proste nefunguje.

--proceduralne

mysql_connect("localhost", "", "");
mysql_select_Db("databaze");

$select1=mysql_query("select * from clanky limit 10");
$select2=mysql_query("select * from clanky");

$pocet_radku_s_limitem=mysql_num_rows($select1);
$pocet_radku_celkove=mysql_num_rows($select2);

echo "počet řádků s limitem je $pocet_radku_s_limitem a celkový počet je $pocet_radku_celkove <br /><br /><hr />";

while($r=mysql_Fetch_Array($select1))
{
$pocet_komentaru=mysql_num_rows(mysql_query("select id from komentare where id_cl=$r[id]"));
echo "clanek čislo $r[id] má $pocet_komentaru komentářů<br/>";
}

a vyprodukuj se neco jako

počet řádků s limitem je 10 a celkový počet je 46
---------------------------------------------------------------------- -------
clanek čislo 1 má 8 komentářů
clanek čislo 2 má 35 komentářů
clanek čislo 3 má 15 komentářů
clanek čislo 4 má 20 komentářů
clanek čislo 5 má 9 komentářů
clanek čislo 6 má 15 komentářů
clanek čislo 7 má 1 komentářů
clanek čislo 8 má 4 komentářů
clanek čislo 11 má 0 komentářů
clanek čislo 12 má 7 komentářů



--OOP
require("db.class.php");
$db = new DB("localhost", "", "", "pesonline_info");
$db->Connect();
$select1=$db->mq("select * from clanky limit 12");
$select2=$db->mq("select * from clanky");

#echo "počet řádků s limitem je ".$select1->mnr()." a celkový počet je ".$select2->mnr()." <br /><br /><hr />";


while($r=$db->mfa())
{
$query=$db->mq("select id from komentare where id_cl=$r[id]");
$pocet_komentaru=$query->mnr();

echo "clanek čislo $r[id] má $pocet_komentaru komentářů<br/>";

}


A tady dochazi k problemu, vypisuje se mi
Call to a member function on a non-object .

Ve vyse uvede knize pouzivaji tridu MYSQLI a taky nacitaji dotazy apod. do funkce a z ni to volaji

$select1=$db->query(...)
$select2=$db->query(...)

a pote treba $select2->mnr

a me to proste nejde. asi bych tu tridu mel mit napsanou jinak...


DIKY KDO TO DOCETL AZ SEM, doufam ze nekdo pochopil oc se mi jedna a ze mi poradi.

Tridu naleznete na http://rjwebdesign.net/db.class.phps
llook
Profil
Vyčlenil bych zvlášť třídu pro výsledky. Prostě ty metody, co pracují s $this->result, bych nacpal např do třídy DBResult:
class DBResult {

function DBResult($result) {
$this->result = $result;
}

function mnr()
{
$count=@mysql_num_rows($this->result);
return $count;
}
// atd...
}
A metodu mq ve třídě DB bych pak udělal takhle:
 function &mq($query) 

{
$result=@mysql_query($query);
$ret = new DBResult($result);
return $ret;
}

A taky bych pouvažoval nad nějakým popisnějším pojmenování metod.
24k_sick
Profil *
ILOOKU, dekuju TI. Funguje to tak jak sem chtel. Sice to nechapu uplne , ale snad to casem prijde.

1/ proc to musi byt jako reference?
2/ nevis jestli je nekde rozebrana trida mysqli abych se podival jak se tvori?
3/ neco podobneho zabyjivaci se timto tematem?

DIKY MOC a DOBROU NOC
Toto téma je uzamčeno. Odpověď nelze zaslat.