Autor | Zpráva | ||
---|---|---|---|
aha Profil |
Ahoj,
už dvě hodiny se trápím s tímto kódem (zdroj Ronnie na Intervalu) a nemůžu jej rozchodit. Dolů jsem přidal chybovou hlášku, kterou mi to dává, ale nemůžu přiít na to, jak to odstranit. Podle mě je chyba někde v proměnné $dotaz - tady je kód: <?php require_once 'ladenka.php'; class DotazNaDb{ protected $host; protected $user; protected $pass; protected $dbase; protected $connect; public $dotaz; #methods public function __construct($host, $user, $pass, $dbase) { // BEGIN function __construct $this->host=$host; $this->user=$user; $this->pass=$pass; $this->dbase=$dbase; $this->connect=mysql_connect($this->host, $this->user, $this->pass); if(!$this->connect){ echo "Spojení s databází selhalo!!!"; } if(!mysql_select_db($this->dbase)){ echo "Nepodařilo se vybrat databázi"; } } // END function __construct} public function dotaz($dotaz){ $this->dotaz=mysql_query($dotaz, $this->connect); } public function vysledek(){ return mysql_fetch_array($this->dotaz, $this->connect); } public function __destruct(){ mysql_close($this->connect); } }//end of class DotazNaDb $dotaz_na_db=new DotazNaDb('localhost','root','','test'); $dotaz_na_db->dotaz("SELECT ovoce FROM test"); while ($radek=$dotaz_na_db->vysledek()){ echo $radek[''].'<br />'; } Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\www\TESTY\pokus_1.php on line 34 |
||
aha Profil |
#2 · Zasláno: 28. 9. 2009, 19:10:04
Pardon, to číslo řádku ve Warnings má být 30!!! Kopíroval jsem to z PsPadu a kód upravil ještě po vložení hlašky :-(
|
||
Fergi Profil |
#3 · Zasláno: 28. 9. 2009, 19:33:21
zkus namisto
return mysql_fetch_array($this->dotaz, $this->connect); toto return mysql_fetch_array($this->dotaz); |
||
aha Profil |
#4 · Zasláno: 28. 9. 2009, 19:53:52
Nic, stále stejná hláška.
|
||
Nox Profil |
#5 · Zasláno: 28. 9. 2009, 20:00:22 · Upravil/a: Nox
No ve hlášce se ti píše že to, co dostává fetch array není resource ale boolean... a v $this->dotaz bude boolean buď u příkazů
u kterých nic nezískáváš (jako insert, update, delete...) nebo v případě chyby. Tady máš select, což znamená, že mysql_query vrátilo false místo resource a to znamená, že je chyba v SQL příkazu to bys měl rozhodně mít ve své třídě ošetřené |
||
tiso Profil |
#6 · Zasláno: 28. 9. 2009, 20:01:29
aha: máš chybu v dotaze, preto ti to nefunguje... nechaj si vrátiť mysql error v metóde dotaz.
btw. hrozná trieda, ešte horšie názvy... Programuje sa v angličtine! |
||
aha Profil |
#7 · Zasláno: 28. 9. 2009, 21:06:14
Nox, tiso
Dík, oba jste měli pravdu. Byla chyba v dotazu - (error výpis pomohl) - vybíral jsem z db test tabulku test, která tam není!!! " hrozná trieda, ešte horšie názvy... Programuje sa v angličtine!" Červenám se. |
||
Joker Profil |
#8 · Zasláno: 28. 9. 2009, 21:12:18
tiso:
„Programuje sa v angličtine!“ Proč? Diakritiku tam nepoužívá a v českých názvech metod a atributů nevidím problém (někdy teda ano, ale neřekl bych, že tohle je ten případ). Přijde mi to lepší než vymýšlet rádoby-anglická pojmenování věcí, které nevím jak se řeknou. |
||
aha Profil |
#9 · Zasláno: 28. 9. 2009, 21:31:51
Ještě jeden dotaz.
Kam mám zabudovat (v tomto příkladu) SET NAMES? V PMA jsem vytvořil tabulku s porovnáváním utf8_czech_ci a při nastaveném kódování na utf-8 ve FF, to vypisuje "kraviny". |
||
tiso Profil |
#10 · Zasláno: 28. 9. 2009, 21:34:25
Joker:
$dotaz_na_db=new DotazNaDb(...) $this->dotaz=mysql_query($dotaz, ...) Tebe sa to zdá v poriadku? Asi som v tomto menej tolerantný. |
||
aha Profil |
#11 · Zasláno: 28. 9. 2009, 21:42:46
Bez mučení přiznám, že v Aj nejsem "in".
Na druhou stranu, když porovnám $dotaz_na_db=new DotazNaDb(...) $this->dotaz=mysql_query($dotaz, ...) a $query_on_db=new Query_on_Db(...) $this->query=mysql_query($query, ...) tak mi ta čeština připaká tak ňák přehlednější. Jsou chvíle kdy to může být věc názoru a jsou chvíle, kdy je to věc poptávky. Pak je to bez diskuse. |
||
tiso Profil |
#12 · Zasláno: 28. 9. 2009, 21:55:46
aha: tak keď to prekladáš jedna k jednej...
Bežne sa trieda na prácu s databázou označuje ako DB, Database, SQL, a podobne... V tvojom prípade by to bol DBQuery. Ide aj o postupnosť mysql funkcií a toho čo vracajú: $query="SELECT ..."; $result=mysql_query($query); while($row=mysql_fetch_assoc($result)){ ... } Treba si pozrieť manuál na php.net a príklady použitia jednotlivých funkcií, používajú vhodné názvy premenných. Je zbytočné vymýšľať nejaké iné, nebezpečné používať inak. |
||
aha Profil |
#13 · Zasláno: 28. 9. 2009, 22:12:49
tiso:
No, takhle jak jsi to popsal, tak už mi to dává smysl. Vzděláním jsem technik, takže vím, že do výkresů taky nemůžu vymýšlet svoje "vychytávky" a musím respektovat pravidla hry. Abych se přiznal, tak o těch konvencích jsem dosud nevěděl. Člověk se pořád učí :-) |
||
Joker Profil |
#14 · Zasláno: 28. 9. 2009, 22:28:09
tiso:
Já zas nemám problém například s: $vysl = mysql_query($dotaz); Například já zas proměnnou pro SQL dotazy pojmenovávám typicky $sql. To je spíš záležitost osobních preferencí. Má-li programátor angličtinu jako cizí jazyk, obvykle občas narazí na limity svých znalostí. Například já myslím si anglicky umím slušně, přesto občas narazím na věci, které prostě nepřeložím (třeba termíny z oborů ve kterých se moc nevyznám). No a v takových případech jsem zažil, že proměnné/metody/XML tagy/... byly pojmenované buď špatně, nebo nějakým šíleným desetislovným opisem. Což taky není zrovna ideální |
||
tiso Profil |
#15 · Zasláno: 28. 9. 2009, 23:55:49
aha: nadáva sa tomu: používanie výstižných a popisných názvov premenných.
Joker: $q je kratšie :-) Tiež občas narazím a konzultujem so slovníkom, pre istotu použijem komentár čo som tým myslel a podobne... Dlhe názvy určite nie sú vhodné, IDE ich síce potom ponúka, takže ich nemusí človek dlho písať, ale aj tak sa v tom zle orientuje, skracovanie ($vysl) tiež nie je dobré. Treba nájsť optimálnu dĺžku. |
||
Časová prodleva: 15 let
|
0