Autor | Zpráva | ||
---|---|---|---|
selektorX Profil * |
#1 · Zasláno: 3. 12. 2009, 23:25:11
Mám problém s mysql_fetch_array. Nějak mi nefunguje, pokud to bere argumenty z třídy:
class db { var $server; var $user; var $password; var $database; function connect() { $this->spojeni = mysql_connect($this->server, $this->user, $this->password); $this->query("SET NAMES `utf8`"); } function close() { mysql_close(); } function query($qry) { return mysql_db_query($this->database , $qry, $this->spojeni) or die(mysql_error()); } function fetch_query($qry) { $qr2 = mysql_db_query($this->database , $qry, $this->spojeni) or die(mysql_error()); return mysql_fetch_row($qr2); } } class sys { function userslist($limit1=0,$limit2=30) { global $db; return $db->query("SELECT * from `users` LIMIT ".$limit1.", ".$limit2); } } while($userprint = mysql_fetch_array($sys->userslist())) { echo $userprint['username']; } echo $sys->userslist() vrátí 1 takže to něco vrací, ale je problém že tato má konsturkce mi vrací "mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ..". Kde dělám chybu? |
||
Majkl578 Profil |
#2 · Zasláno: 4. 12. 2009, 00:08:06
Kód je to opravdu příšerný. Doufám (ano, opravdu), že to běží někde kde je jen PHP4, protože kdyby i 5, tak bych se asi styděl. :) Přijde mi to jako pokus OOP bez znalosti jeho myšlenky. Jen aby byly v kódu šipečky. To raději piš procedurálně... :)
V rychlosti: mysql_db_query() je deprecated použití "global" je opravdu nepěkné "var" se nepožívá, na to je public/protected/private K problému: Nevolá se náhodou ta metoda při každém průchodu while? Řekl bych, že ano. Nevím, jestli něco z toho co jsem napsal problém řeší, ale nemohl jsem si pomoct. |
||
selektorX Profil * |
#3 · Zasláno: 4. 12. 2009, 08:52:29
To problém opravdu neřeší. Taky bych řekl, že se volá při každém průchodu while, ale pokud nic z toho není v třídách tak to funguje). K těm třídám: jsou napsané pro PHP4, v současnosti běží na PHP5. Nemyslím si že jsou šílené. Je to pro specifické použití pro správu uživatelů. Dotazy ve funkcích v třídě sys jsou někdy až 4 řádky dlouhé + v třídě db potom definuju jednotlivá pravidla, omezení proti útoky na db(i když je je fakt, že už jsem to v php5 odstranil). Jak byste to teda řešil vy? Celá aplikace funguje takto: index.php načte třídy a config, pak includuje login.php, ten login_class.php. Pokud je přihlášení úspěšné, tak login.php načte logged.php. Jednoduchý a fuknční princip. Co se vám na tom nelíbí?
|
||
Majkl578 Profil |
#4 · Zasláno: 4. 12. 2009, 12:54:44
Asi jsem zkažený z MVP, Nette a dibi... :) Například jsem zvyklý na automatické fetchování dotazů. Jinak mimochodem, když se pokaždé volá ta metoda z while znovu, nevolá se náhodou i ten dotaz znovu a nevrací nový resource? ;)
Poloobjektový přístup k práci s databází je opravdu divný. Třeba tohle bych udělal jinak. Mimojiné nevidím žádný logický význam třídy sys. |
||
AM_ Profil |
#5 · Zasláno: 4. 12. 2009, 14:09:41
echo $sys->userslist() vrátí 1
tak to je zřejmě bug PHP, protože fce mysql_db_query může vracet jedině boolean nebo objekt mysqli_result. |
||
selektorX Profil * |
#6 · Zasláno: 4. 12. 2009, 19:16:44
Tak jsem se přinutil přepsat ten starý php4 kód do php5 a mimo to že je to jednodušší to funguje :)
class sys { function __construct($server,$user,$password,$database) { mysql_connect($server, $user, $password); mysql_select_db($database); mysql_query("SET NAMES `utf8`"); } function __destruct() { mysql_close(); } function fetch($qry) { $fer=mysql_query($qry) or die(mysql_error()); return mysql_fetch_row($fer); } function userslist($limit1=0,$limit2=30) { $mfq = mysql_query("SELECT * from `users` LIMIT ".$limit1.", ".$limit2); for($i=0; $userprint=mysql_fetch_array($mfq); $i++) { $retuser[$i]=$userprint; } return $retuser; } } foreach ($sys->userslist() as $value) { echo ">".$value['username']."<<br>"; } |
||
AM_ Profil |
#7 · Zasláno: 4. 12. 2009, 23:02:12
selektorX:
„or die(mysql_error());“ tohle hlavně nezapomeň vyhodit, než web budeš publikovat - je to "dobrý tahák pro hackery". |
||
Časová prodleva: 14 let
|
0