1 (edited by ICan 2010-09-13 10:27:46)

Topic: limit ir kintamieji

sendien prireikia uzklausos su LIMIT, is pradziu bandziau sita :

$query="SELECT * FROM news ORDER BY data DESC LIMIT '$lpage', 3";

mete erora

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\wamp\www\Libs\NewsClass.php on line 20

tuomet pabandziau

$query="SELECT * FROM news ORDER BY data DESC LIMIT 0, 3";

ir viskas gerai

taipogi bandziau

 $query="SELECT * FROM news ORDER BY data DESC LIMIT ('$tpage', 5)";
$query="SELECT * FROM news ORDER BY data DESC LIMIT '".$tpage."', 5";

taigi kur darau klaida?

2 (edited by Ramex 2010-09-13 11:00:16)

Re: limit ir kintamieji

Pirmiausia, išmok debugint. funkcija mysql_query grąžina resursą, jei užklausa buvo sėkmingai įvykdyta. Paskui tu tą resursą naudoji kaip funkcijos mysql_fetch_array parametrą. šiuo atveju, užklausa nebuvo sėkmingai įvykdyta, tad resursas nebuvo grąžintas. kokia įvyko klaida, gali pasižiūrėti per funkciją mysql_error. paprasčiausiai tai būtų padaryti taip:

$res = mysql_query($query) or die(mysql_error());

ir taip žinosi, kas konkrečiai tavo užklausoje yra ne taip. kitas dalykas, ar tu esi tikras, kad tavo kintamasis $tpage saugo skaitinę reikšmę? vėlgi labai lengva patikrinti su var_dump funkcija, kuriai kaip parametrą perduosi būtent savo kintamąjį.
ir pabaigai, aš visgi pasakysiu kas blogai yra tavo užklausoje, nes tai labai akivaizdu. kokio velnio $lpage rašai į viengubas kabutes? užklausa turėtų atrodyti taip:

$query="SELECT * FROM news ORDER BY data DESC LIMIT {$lpage}, 3";

beje, tik parašęs atsakymą, pastebėjau dar vieną niuansą - pas tavęs skiriasi kintamųjų vardai: vienur $lpage, okitur $tpage.

Su sąlyga, kad šūdo nebus...

Re: limit ir kintamieji

Klaidos:
1) neapdoroji MySQL klaidų;
2) kabutės užklausoje nereikalingos LIMIT operatoriuje, nes naudojami tik sveiki skaičiai;

Re: limit ir kintamieji

neapdorojau klaidu nes zinojau kur ji yra, tik nezinojau kaip istaisyti.  del kabuciu dabar jau zinosiu :). del kintamuju tai tesiog kai pavizdi rasiau sumaisiau raides ir tiek, abu jie turi skaitines reiksmes.

p.s. dekui uz pagalba :)

Re: limit ir kintamieji

Apdoroti klaidas reikia ne tam kad sužinotum kur ji yra, o tam kad žinotum kokia...

MongoDB Certified Developer
MongoDB Certified DBA
Zend Certified Engineer

Re: limit ir kintamieji

Dar klaidas reikia apdoroti ir dėlto, kad gali būt, kas bus kokia nors tavo nenumatyta situacija ir net ir paprasčiausioje užklausoje, ar kitoje kodo vietoje, įvyks klaida. Jeigu klaida yra neapdorojama, priklausomai nuo serverio/php nustatymų, ji gali būti tiesiog rodoma vartotojaui - kas yra gana dažnas ir labai ydingas dalykas. Neapdorotų klaidų pranešimai tinklapio vartotojui tai:
a) papildoma informacija silpninanti serverio/programos saugumą;
b) prastas programuotojo darbas;
c) ilgesnis klaidos ištaisymo laikas;

Re: limit ir kintamieji

Jeigu nedaeina, kad kodinti reikia tvarkingai, tai gal per anksti žaist su mysql;u.
kas trukdo pasikurt f-ja su erroru rodymu ?

my_query($query){
return mysql_query($query) or die(mysql_error());
}

tai kas trukdo ?

Kiek maigyklių sudėvėjai ?

Re: limit ir kintamieji

Niekas netrukdo, žinių ir praktikos trūkumas.

Beje, tas die(mysql_error()) yra tik pradinis atspirties/debuginimo taškas. Realiai kodas neturi numirti, o programa turi tęstis ir varototjas pamatyti jau vartotojišką pranešimą. mysql_error() turi nukeliauti kažkur adminui ar pan. Pats jį naudoju kaip pradini pvz. nuo ko pradėti. Dabar tik noriu pažymėti, kad kai kas nepagalvotų jog čia yra jau galutinis "klaidų apdorojimo" sprendimas.

Re: limit ir kintamieji

minde wrote:

Niekas netrukdo, žinių ir praktikos trūkumas.

Beje, tas die(mysql_error()) yra tik pradinis atspirties/debuginimo taškas. Realiai kodas neturi numirti, o programa turi tęstis ir varototjas pamatyti jau vartotojišką pranešimą. mysql_error() turi nukeliauti kažkur adminui ar pan. Pats jį naudoju kaip pradini pvz. nuo ko pradėti. Dabar tik noriu pažymėti, kad kai kas nepagalvotų jog čia yra jau galutinis "klaidų apdorojimo" sprendimas.

function mirk() {
   mail('admino@pastas.lt','programa leisgyve', mysql_error());
   die('programa nemire, bet toliau nebedirbs');
}
mysql_query($query) or mirk();

:)

MongoDB Certified Developer
MongoDB Certified DBA
Zend Certified Engineer

Re: limit ir kintamieji

Na su programavimu yra taip, kad kuo giliau į mišką - tuo daugiau medžių. Iš pradžiu kiliniam aplikaciją, paskui pradedam errorus kažkur saugoti. Paskui sudėtingėjant aplikacijai errorus saugom duomenų bazėje. Tada pradeda kilti klausimas kur saugoti errorus, kai dar nebūnam prisijungę prie DB (aplikacijos init fazė). Tada pradedam kurti aplikacijos run-levelius su skirtingom error'u saugojimo strategijom (db/log_file/email) kiekvienai fazei. Vėliau kyla klausimas kur saugoti error'ą jeigu fail'ina visos error'ų saugojimo stratgijos (diske nėr vietos error_log'ui, mail() funkcija failina, nepavyksta prisijungti prie db ar pan.) ir t.t. ir pan (-;

11 (edited by zygis 2010-09-13 14:33:51)

Re: limit ir kintamieji

minde wrote:

Na su programavimu yra taip, kad kuo giliau į mišką - tuo daugiau medžių. Iš pradžiu kiliniam aplikaciją, paskui pradedam errorus kažkur saugoti. Paskui sudėtingėjant aplikacijai errorus saugom duomenų bazėje. Tada pradeda kilti klausimas kur saugoti errorus, kai dar nebūnam prisijungę prie DB (aplikacijos init fazė). Tada pradedam kurti aplikacijos run-levelius su skirtingom error'u saugojimo strategijom (db/log_file/email) kiekvienai fazei. Vėliau kyla klausimas kur saugoti error'ą jeigu fail'ina visos error'ų saugojimo strategijos (diske nėr vietos error_log'ui, mail() funkcija failina, nepavyksta prisijungti prie db ar pan.) ir t.t. ir pan (-;

Na paskutiniu iš paminėtų atveju belieka nusišaut :D
Na dar nebent į kokį išorinį resursą bandyt paduoti per postą errorą... Jei jau ir tas nebeveikia tada vsio.... gal...

MongoDB Certified Developer
MongoDB Certified DBA
Zend Certified Engineer

Re: limit ir kintamieji

nu tesiog nenorejau persikrauti kodu nes tikrai zinojau kur ir kkokia klaida darau o dabar kai pabandgiau ta funkcija

         if (!$result) {
            throw  new Exception(ERRORQUERY);
        }

13 (edited by Ramex 2010-09-14 09:52:48)

Re: limit ir kintamieji

ICan wrote:

nu tesiog nenorejau persikrauti kodu nes tikrai zinojau kur ir kkokia klaida darau o dabar kai pabandgiau ta funkcija

jei tu būtum žinojęs, kokia klaida, tai tau net nebūtų reikėję čia kreiptis. todėl nesakyk, kad žinojai, nes taip nebuvo =]
o klaidų handlingas nėra bereikalingas kodas, kuo greičiau tai suprasi, tuo bus pačiam geriau

Su sąlyga, kad šūdo nebus...

14 (edited by ICan 2010-09-16 14:27:18)

Re: limit ir kintamieji

is mano pateiktu pavizdziu matosi  tikrai, kad zinau, kad darau sintakses klaida ir kokioje vieotje, tik nezinojau kaip ja istaisyti. o del eroru hadlingo tai as nesakiau, kad tai bereikalingas kodas, tik jam ateina laikas biski veliau-dabaiginejant ta kodo dali kuria uzsiemiau :)