Pereiti prie turinio

PHP. Atvaizdavimas info iš DB.


Rekomenduojami pranešimai

Sveiki,

 

turiu problemėlę, teisingiau nesuprantu kas blogai...

 

Kodas:

 $db = Db::getInstance(); 
     $result = $db->Execute('SELECT * FROM `'._DB_PREFIX_.'atsiliepimai` where status = "Enabled" ORDER BY RAND() LIMIT 1;');
     $row = mysql_fetch_assoc($result);
     return $row;

 

 

O klaida: Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given.

DB tvarkinga, duomenys yra...

Nuoroda į pranešimą
Dalintis kituose puslapiuose

mysql nuo php versijos nepriklauso, pakopink kaip duomenu baze atrodo ir kokie duomenys joje

 

php sintaksė skiriasi.

 

INSERT INTO `ps_atsiliepimai` (`atsiliepimai_id`, `atsiliepimai_title`, `atsiliepimai_submitter_name`, `atsiliepimai_main_message`, `date_added`, `status`) VALUES
(1, '[email protected]', 'Vardas', 'Atsiliepimas', '2012-07-05 09:48:00', 'Enabled');

 

 

Užteks?

 

O jei pabandai labai paprastą užklausą, 'select * from tablename', viskas tvarkoje?

Gal nėra db įrašų, kurių vertės lygios "enabled"?

 

Ne, nerodo nieko. Įrašų yra.

 

Dar vienas įdomus dalykas, kurį ko gero ankščiau reikėjo pasakyti. Su prestashop 1.4 veikia viskas tvarkingai, o atnaujinus - nebeveikia...

Čia prestashop modulio dalis :)

Redagavo Esnyper
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Galbūt ne prie tos duombazės prisijungi su php, arba kitas vartotojas. Tavo matoma klaida atsiranda tada, kai $db->execute gražina reikšmę FALSE, kas reiškia jog pačioje užklausoje yra klaida arba vartotojas neturi teisių įvykdyti nurodytą užklausą.

 

Warning: mysql_error() expects parameter 1 to be resource, null given

Ne taip naudoji mysql_error f-ją, jai reikia duoti kažkokį parametrą...Tu turi kažkokią darbui su MySQL klasę, greičiausiai MySQLi lib'as bus. Pabandyk išspausdinti $db->error iškart po užklausos įvykdymo, turėtų rodyti kokia klaida :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Perrašiau kodą.

Turiu funkciją:

public function rodytiAtsiliepimus ()
   {
       //Sukuriame masyvą kuriame laikysime atsiliepimus
       $output = array(); 
       $db = Db::getInstance();
       $vnt = $db->Execute('SELECT COUNT(*) FROM `'._DB_PREFIX_.'atsiliepimai`');
       $result = $db->Execute('SELECT * FROM `'._DB_PREFIX_.'atsiliepimai` ORDER BY atsiliepimai_id DESC');
       while ($row = mysqli_fetch_assoc($vnt))
       {
           $results[] = $row;
       }

       global $smarty;
           $smarty->assign(array('atsiliepimai' => $results));
           return $this->display(__FILE__, 'rodyti_atsiliepimus.tpl');
   }

 

 

'SELECT COUNT(*) FROM `'._DB_PREFIX_.'atsiliepimai`'

Grąžina skaičių (šiuo atveju - 2).

 

Klaida ta pati:

Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, array given

 

Kur blyn šuo pakastas?

Redagavo Esnyper
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Perrašiau kodą.

Turiu funkciją:

public function rodytiAtsiliepimus ()
   {
       //Sukuriame masyvą kuriame laikysime atsiliepimus
       $output = array(); 
       $db = Db::getInstance();
       $vnt = $db->Execute('SELECT COUNT(*) FROM `'._DB_PREFIX_.'atsiliepimai`');
       $result = $db->Execute('SELECT * FROM `'._DB_PREFIX_.'atsiliepimai` ORDER BY atsiliepimai_id DESC');
       while ($row = mysqli_fetch_assoc($vnt))
       {
           $results[] = $row;
       }

       global $smarty;
           $smarty->assign(array('atsiliepimai' => $results));
           return $this->display(__FILE__, 'rodyti_atsiliepimus.tpl');
   }

 

 

'SELECT COUNT(*) FROM `'._DB_PREFIX_.'atsiliepimai`'

Grąžina skaičių (šiuo atveju - 2).

 

Klaida ta pati:

Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, array given

 

Kur blyn šuo pakastas?

 

Galbūt vietoj viso $row masyvo reikia imti tik vieną reikšmę? Pvz.: $row['mysql_stulpelio_vardas']

 

P.S. Tik spėjimas.

Redagavo leechMaster
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Koks cia framework'as ar pats aprasei funkcijas??? Pabandyk padampinti: die(var_dump($vnt));

 

Ir dar: ispradziu tu naudoji kazkokius aprasytus metodus, o po to kabini ant mysqli_fetch_assoc. Kad naudoti mysqli, reikia nuo jo ir pradeti - http://php.net/manual/en/mysqli-result.fetch-assoc.php

 

Ir global - yra labai blogas dalikas.

 

Ir LT kalba naudoti yra blogai - vardink viska eng.

Redagavo apieviska
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Koks cia framework'as ar pats aprasei funkcijas??? Pabandyk padampinti: die(var_dump($vnt));

 

Ir dar: ispradziu tu naudoji kazkokius aprasytus metodus, o po to kabini ant mysqli_fetch_assoc. Kad naudoti mysqli, reikia nuo jo ir pradeti - http://php.net/manua...fetch-assoc.php

 

Ir global - yra labai blogas dalikas.

 

Ir LT kalba naudoti yra blogai - vardink viska eng.

 

Prestashop TVS'as.

 

Padampinus rodo šitą: bool(true).

 

Dėl aprašytų metodų, pasidomėsiu. Global reikalingas, kad Smarty veiktų... Nieko čia nepadarysi. Dėl lietuvių kalbos - gerai, pasitaisysiu :D

Nuoroda į pranešimą
Dalintis kituose puslapiuose

http://www.prestashop.com/blog/en/good_practices_on_class_db_for_prestashop_141/ - cia darbas su db aprasytas.

 

O butent

$sql = ‘SELECT * FROM ‘._DB_PREFIX_.’shop’;

if ($results = Db::getInstance()->ExecuteS($sql))

foreach ($results as $row)

	echo $row[‘id_shop’].’ :: ‘.$row[‘name’].’<br />’;

 

O del global - visada galima be jo apsieiti, reikia tik noro.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

O dėkui! Šito ieškojau dokumentacijoje, bet neradau...

 

Na global su laiku gal ir naikinsiu, bet šiuo metu dar net nesuprantu kuom jis blogas/geras :D

 

tarkim yra wordpress

 

192-168-0-100:~$ cd /Users/****/Sites/wordpress 
192-168-0-100:wordpress$ for t in files links directories; do echo `find . -type ${t:0:1} | wc -l` $t; done;
1369 files
0 links
119 directories

 

Ir jei tu naudoji global daznai (o jei pradedi naudoti, tai pripranti prie jo), tai tu nebesuprasi kur tarp 1369 failu yra reikiamas tau.

 

Kam isvis kabinti prie smarty funkcijoje? Jug galima panasiai.

 

public function rodytiAtsiliepimus ()
   {
       //Sukuriame masyvą kuriame laikysime atsiliepimus
       $output = array(); 
       $db = Db::getInstance();
       $vnt = $db->Execute('SELECT COUNT(*) FROM `'._DB_PREFIX_.'atsiliepimai`');
       $result = $db->Execute('SELECT * FROM `'._DB_PREFIX_.'atsiliepimai` ORDER BY atsiliepimai_id DESC');
       while ($row = mysqli_fetch_assoc($vnt))
       {
           $results[] = $row;
       }

       return $results;
   }
           $smarty->assign(array('atsiliepimai' => $object->rodytiAtsiliepimus()));
           $smarty->display(__FILE__, 'rodyti_atsiliepimus.tpl');

Redagavo apieviska
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Supratau dėl global. Pasitaisiau. O kodas vistiek neveikia, taip kaip turėtų...

 

public function rodytiAtsiliepimus ()
   {
       $sql = 'SELECT * FROM '._DB_PREFIX_.'atsiliepimai';
       if ($results = Db::getInstance()->ExecuteS($sql))
    		foreach ($results as $row) {
		$results[] = $row;
       }

           $this->smarty->assign(array('atsiliepimai' => $results));
           return $this->display(__FILE__, 'rodyti_atsiliepimus.tpl');
   }

 

 

DB yra 2 įrašai:

(12, 'atsiliepimai_elpastas', 'atsiliepimai_autorius', 'atsiliepimai_tekstas', '2012-11-01 21:57:13', 0),
(15, 'agurkassad', 'aSA', 'fsadasdas', '2012-11-01 22:01:32', 0);

 

 

O man atvaizduoja po du kartus tą patį:

Atsiliepimas: atsiliepimai_tekstas
Autorius: atsiliepimai_autorius
Atsiliepimas: fsadasdas
Autorius: aSA
Atsiliepimas: atsiliepimai_tekstas
Autorius: atsiliepimai_autorius
Atsiliepimas: fsadasdas
Autorius: aSA

Redagavo Esnyper
Nuoroda į pranešimą
Dalintis kituose puslapiuose

array(4) { [0]=> array(6) { ["atsiliepimai_id"]=> string(2) "12" ["atsiliepimai_elpastas"]=> string(21) "atsiliepimai_elpastas" ["atsiliepimai_autorius"]=> string(21) "atsiliepimai_autorius" ["atsiliepimai_tekstas"]=> string(20) "atsiliepimai_tekstas" ["data"]=> string(19) "2012-11-01 23:57:13" ["statusas"]=> string(1) "0" } [1]=> array(6) { ["atsiliepimai_id"]=> string(2) "15" ["atsiliepimai_elpastas"]=> string(10) "agurkassad" ["atsiliepimai_autorius"]=> string(3) "aSA" ["atsiliepimai_tekstas"]=> string(9) "fsadasdas" ["data"]=> string(19) "2012-11-02 00:01:32" ["statusas"]=> string(1) "0" } [2]=> array(6) { ["atsiliepimai_id"]=> string(2) "12" ["atsiliepimai_elpastas"]=> string(21) "atsiliepimai_elpastas" ["atsiliepimai_autorius"]=> string(21) "atsiliepimai_autorius" ["atsiliepimai_tekstas"]=> string(20) "atsiliepimai_tekstas" ["data"]=> string(19) "2012-11-01 23:57:13" ["statusas"]=> string(1) "0" } [3]=> array(6) { ["atsiliepimai_id"]=> string(2) "15" ["atsiliepimai_elpastas"]=> string(10) "agurkassad" ["atsiliepimai_autorius"]=> string(3) "aSA" ["atsiliepimai_tekstas"]=> string(9) "fsadasdas" ["data"]=> string(19) "2012-11-02 00:01:32" ["statusas"]=> string(1) "0" } } 

 

O kas randasi lentelėje jau rodžiau :)

Redagavo Esnyper
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...