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
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
zkus namisto
return mysql_fetch_array($this->dotaz, $this->connect);

toto
return mysql_fetch_array($this->dotaz);
aha
Profil
Nic, stále stejná hláška.
Nox
Profil
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
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
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
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
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
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
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
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
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
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
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.

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: