php.doc

(50 KB) Pobierz
Porcjowanie zapytañ w MySQL cz

Porcjowanie zapytañ w MySQL cz.1


By³o ju¿ o porcjowaniu zapytañ w bazie tekstowej,
teraz nadszed³ czas na MySql...

W MySql jest to tym ³atwiejsze ¿e wszystko odbywa
siê za pomoc¹ parametru LIMIT podawanego w zapytaniu np:

$zapytanie="SELECT * FROM wyszukiwarka WHERE opis LIKE '%$searchtext%' ORDER by id DESC" LIMIT 0,10;

takie zapytanie pobierze dane od rekordu 0 do 10....
tak wiêc ca³y problem to przekazanie tych parametrów do nastêpnej strony
dodanie odpowiedniej liczby i wyœwietlenie...
zatem spróbujmy to zrobiæ na przyk³adzie prostej wyszukiwarki:
 

<?php

if(($s=="") && ($e=="")){
$s="0";
//ustawiamy limit na 20 pozycji na stronie
$e="20";
}
//³¹czymy siê z baz¹
$conn = mysql_connect("localhost","user","password");
mysql_select_db("MOJABAZA");

$zapytanie="SELECT * FROM wyszukiwarka WHERE opis LIKE '%$searchtext%' ORDER by id DESC" LIMIT $s,$e;
$wynik=mysql_query($zapytanie);
echo"Wyniki wyszukiwania dla zapytania: <b>$searchtext</b><br><br>";

//teraz zliczymy sobie iloœæ rekordów, bêdzie nam to potrzebne aby wiedzieæ czy
//czy utworzyæ link "nastêpna strona" jeœli bêdzie to potrzebne
list($ile)=mysql_fetch_row(mysql_db_query("MOJABAZA","SELECT count(*) FROM wyszukiwarka WHERE opis LIKE '%$w%'"));

while($rekord=mysql_fetch_array($wynik)){
echo"
<table border=\"1\" cellpadding=\"2\" width=\"100%\">
<tr><td bgcolor=\"#80D6FF\">
<a href=\"".$rekord['adres']."\">".$rekord['tytul']."</a>
</td></tr><tr><td>
".$rekord['opis']."
</td></tr></table>";
}

//generujemy linki do nastêpnej strony jeœli rekordów jest wiêcej ni¿ tych wyœwietlonych
echo"<center>";
if($ile <= $e){
echo"<img src=\"img/bc.jpg\" border=\"0\"> <a href=\"javascript:history.back();\">poprzednia strona</a>";
}
if(($ile <= $e) && ($ile > $e)){
echo" | ";
}
if($ile > $e){
echo"<a href=\"$url/show_l.phtml?s=$e&e=".$b=$e+$e."\">nastêpna strona</a> <img src=\"img/nx.jpg\" border=\"0\">";
}
echo"</center>";
?>



przekazuj¹c cyferki w linku (<a href=\"show_l.phtml?s=$e&e=".$b=$e+$e."\">)
powodujemy ¿e wartoœæ LIMIT $s,$e wci¹¿ jest zwiêkszana np.

przy pierwszym wyœwietleniu strony ten link bêdzie wygl¹da³ tak:
<a href=\"show_l.phtml?s=20&e=40\">

tak wiêc przy pierwszym wyœwietleniu dostaniemy pozycje od 0 do 20
a w linku przeka¿emy informacje o tym ¿e na nastepnej stronie
maj¹ zostaæ wyœwietlone pozycje od 20 do 40.

To oczywiœcie przyk³ad najprostszy z mo¿liwych... chodzi tylko o to
¿eby zrozumieæ zasadê dzia³ania takiego porcjowania....
w nastêpnej czêœci opiszê jak zrobiæ porcjowanie na zasadzie
linków na stronie w stylu [1] [2] [3] [4] [5]
tak jak to ma miejsce na przyk³ad na Google.

...na razie polecam poæwiczenie na prostszym przyk³adzie, a ten powinien byæ idealny.


 

Najczęstsze błędy


Każdemu zdarzają się pomyłki, mnie również. PHP jednak ułatwia nam nieco sprawę, bo wyświetla komunikaty o błędach. Postaram się objaśnić znaczenie tych najczęściej występujących.




Przykład: echo("tekst";

Błąd: Parse error: parse error in 'nazwa pliku' on line 'linia'
Znaczenie błędu: Brak nawiasu w instrukcji echo. (parse error - tu: błąd składni)
Jak poprawić: wstawić nawias



Przykład: function aaa {
echo("aaa");
}
Błąd: Parse error: parse error, expecting `'('' in 'plik' on line 'linia'
Znaczenie błędu: Błąd składni - brak nawiasów w definicji funkcji
Jak poprawić: jeżeli funkcja pobiera argumenty, to podać je w nawiasach. Jeżeli nie, to i tak wstawić puste nawiasy.



Przykład: if (isset($action) { echo("blablabla"); }
Błąd: Parse error: parse error in 'nazwa pliku' on line 'linia'
Znaczenie: to samo, co powyżej, ale tym razem to błąd w zagnieżdżeniu nawiasów
Jak poprawić: Dopisać jeszcze jeden nawias (od if)



$file = fopen("plik.txt");
Błąd: Warning: Wrong parameter count for fopen() in 'plik' on line 'linia'
Znaczenie: Ostrzeżenie - zły parametr (argument) dla funkcji fopen
Jak poprawić: podaj odpowiedni drugi argument.
Dla przypomnienia ich pełna lista:
//Funkcja fopen otwiera plik plik.txt:
$plik = fopen("plik.txt","r"); // do odczytu
$plik = fopen("plik.txt","w"); // do skasowania całej zawartości i zapisu
$plik = fopen("plik.txt","a"); // do dopisywania nowej treści
$plik = fopen("plik.txt","r+"); // do odczytu i zapisu
$plik = fopen("plik.txt","w+"); // do skasowania wszystkiego, zapisu i odczytu
$plik = fopen("plik.txt","a+"); // do dopisywania i odczytu



$p = fopen("plik.txt","r");
fclose($p);

Błąd: Jeżeli nie ma pliku plik.txt, to PHP zwróci komunikat:
Warning: fopen("plik.txt","r") - No such file or directory in 'plik' on line 'linia'
Znaczenie: Ostrzeżenie - nie ma takiego pliku lub katalogu (coś jak DOSowe 'Bad command or filename'... ktoś to jeszcze pamięta?)
Jak poprawić: Stworzyć taki plik, albo zmienić wywołanie funkcji fopen do istniejącego pliku

I związany z tym błąd:
Warning: Supplied argument is not a valid File-Handle resource in 'plik' on line 'linia'
Znaczenie: Podany argument nie jest prawidłowym "wskaźnikiem na plik" (wolna interpretacja) Jak poprawić: Jak wyżej

 

formularze

Zgłoś jeśli naruszono regulamin