Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

47
Leksion 13 Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

description

Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se. Leksion 13. Arkitektura e nje baze te dhenash ne web. - PowerPoint PPT Presentation

Transcript of Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

Page 1: Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

Leksion 13

Aksesimi i bazes se te dhenave MySQL nepermjet

PHP-se

Page 2: Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

Arkitektura e nje baze te dhenash ne web

Veprimi baze i nje web serveri tregohet ne figure. Sistemi perbehet nga dy objekte: nje Web server dhe nje Web browser. Ndermjet tyre kerkohet nje linje komunikimi: Nje web browser ben nje kerkese ne web server dhe web serveri kthen pergjigjen.

Kjo arkitekture perdoret per shperndarjen e faqeve statike. Ndersa per web sitet me nje baze te dhenash, arkitektura eshte pak me komplekse:

Page 3: Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

Arkitektura e nje baze te dhenash ne web

Nje transaksion tipik i bazes se te dhenave web perbehet nga etapat e meposhtme:

1. Web browseri i nje perdoruesi dergon nje kerkese HTTP per nje faqe web te caktuar. Psh: mund te beje nje kerkim per te gjithe librat ne bazen e te dhenave Books te shkruar nga Laura Thomson, duke perdorur nje forme HTML. Faqja e rezultateve te kerkimit quhet results.php

2. Web serveri merr kerkesen per results.php, merr skedarin dhe ia dergon ate motorit te PHP-se per procesim.

Page 4: Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

Arkitektura e nje baze te dhenash ne web

3. Motori PHP fillon duke analizuar (parsing) skriptin. Brenda skriptit eshte nje komande per t’u lidhur me bazen e te dhenave dhe per te ekzekutuar nje query (kryen kerkimin per librat). PHP hap nje lidhje me serverin MySQL dhe i dergon query-n e duhur.

4. Serveri MySQL e merr query-n e bazes se te dhenave dhe e perpunon ate, dhe dergon rezultatet, nje liste librash, ne motorin e PHP-se

5. Motori i PHP-se perfundon ekzekutimin e skriptit, i cili zakonisht do te perfshije formatimin e rezultateve te query-t, ne menyre te kendeshme ne HTML. Ai me pas i kthen rezultatet HTML ne Web server.

6. Web Serveri e kalon HTML-ne ne browser, ku perdoruesi mund te shohe listen e librave qe ka kerkuar.

Page 5: Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

Percaktimi se cilen Pakete MySQL duhet te perdorni

5

Paketa mysqli (MySQL Improved) u be e disponueshme me PHP 5 dhe eshte dizenjuar qe te punoje me versionin 4.1.3 te MySQL-se dhe me versionet e mevonshme.

Versionet me te hershme duhet te perdorin paketen mysql

Paketa mysqli eshte paketa ekuivalente e orientuar nga objektet (object-oriented) e paketes mysql, por mund te perdoret edhe ne menyre procedurale.

Paketa mysqli ka permiresuar shpejtesine, sigurine dhe kompatibilitetin me librarite.

Page 6: Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

Hapja dhe mbyllja e nje lidhjeje MySQL

6

Per te hapur nje lidhje me nje server databaze MySQL perdoret funksioni mysql_connect()

Funksioni mysql_connect() kthen nje numer te plote pozitiv nese ai lidhet me databazen ne menyre te suksesshme, perndryshe kthen FALSE

Vlera e kthimit te funksionit mysql_connect() duhet t’i jepet si vlere nje variabli ne menyre qe te aksesoni databazen brenda skriptit tuaj.

Page 7: Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

Hapja dhe mbyllja e nje lidhjeje MySQL (vazhd.)

7

Sintaksa e mysql_connect() eshte:

$connection = mysql_connect("host" [, "user", "password"]);

Parametri host percakton emrin e hostit ku eshte i instaluar serveri i databazes suaj MySQL

Parametrat user dhe password percaktojne emrin perdoruesit dhe passwordin e nje llogarie MySQL

Page 8: Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

8

Lidhja me databazen i jepet si vlere variablit $DBConnect

$DBConnect = mysql_connect("localhost", "dongosselin ", "rosebud");

Lidhja me databazen mund te mbyllet me ane te funksionit mysql_close() mysql_close($DBConnect);

Hapja dhe mbyllja e nje lidhjeje MySQL (vazhd.)

Page 9: Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

9

Hapja dhe mbyllja e nje lidhjeje MySQL (vazhd.)

Page 10: Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

10

Figure 8-1 MySQLInfo.php ne nje Web browser

Hapja dhe mbyllja e nje lidhjeje MySQL (vazhd.)

Page 11: Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

Nje funksion tjeter qe ben pothuajse te njejten gje si funksioni mysql_connect eshte funksioni mysql_pconnect(). Ndryshimi eshte se mysql_pconnect kthen nje lidhje te qendrueshme me bazen e te dhenave.

Nje lidhje normale me bazen e te dhenave do te mbyllet kur skripti e perfundon ekzektutimin ose kur skripti therret funksionin mysql_close(). Nje lidhje e qendrueshme mbetet e hapur pasi perfundon ekzekutimi i skriptit dhe nuk mund te mbyllet me funksionin mysql_close().

Lind pyetja “Pse mund te na duhet kjo?” Lidhja me nje baze te dhenash kerkon njefare kohe. Kur thirret mysql_connect(), perpara se te perpiqet te lidhet me bazen e te dhenave, ai do te kerkoje automatikisht nese ka ndonje lidhje te qendrueshme qe eshte hapur qe me pare. Nese po, ai do te perdore ate lidhje ne vend qe te hape nje lidhje tjeter. Kjo kursen kohen dhe ngarkesen e serverit.

Hapja dhe mbyllja e nje lidhjeje MySQL (vazhd.)

Page 12: Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

Cilen te perdorim: mysql_connect apo mysql_pconnect?

Mendimet jane te ndryshme: Disa mendojne se eshte me mire te perdoret mysql_connect, sepse mysql_pconnect() u dizenjua per te siguruar nje mekanizem per reduktimin e kostos se hapjes dhe mbylljes se lidhjeve me serverin MySQL. Fatkeqesisht, per shkak te bashkeveprimit ndermjet arkitektures se serverit Apache dhe arkitektures se PHP-se, trafiku i larte ne nje site qe perdor lidhje te qendrueshme (pconnect) shpejt mund ta mbushe serverin MySQL me shume lidhje te paperdorura, gje qe do te ndalonte shume lidhje aktive qe te aksesonin databazen.

Hapja dhe mbyllja e nje lidhjeje MySQL (vazhd.)

Page 13: Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

Raportimi i gabimeve MySQL

13

Arsyet per te mos u lidhur me nje server databaze perfshijne: Serveri i databazes nuk eshte ne pune. Privilegje te pamjaftueshme per te

aksesuar burimin e te dhenave Username dhe/ose password i pasakte

Page 14: Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

Raportimi i gabimeve MySQL (vazhd.)Funksioi mysql_errno() kthen kodin e

gabimit nga perpjekja e fundit e thirrjes se nje funksioni MySQL, ose 0 nese nuk ka ndodhur asnje gabim.

mysql_error() — Kthen tekstin e mesazhit te gabimit nga veprimi i meparshem MySQL

Funksionet mysql_errno() dhe mysql_error() kthejne rezultatin e funksionit te meparshem mysql*()

Page 15: Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

Zgjedhja e nje DatabazeSintaksa e funksionit mysql_select_db()

eshte: mysql_select_db(database [, connection]);

Funksioni kthen nje vlere TRUE nese e ka zgjedhur me sukses databazen , ose FALSE ne te kundert

Per qellime sigurie, ju mumd te zgjidhni te perdorni nje skedar te perfshire per t’u lidhur me nje server MySQL dhe per te zgjedhur nje databaze.

Page 16: Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

Shembull<?php $host="localhost";$userName = "root";$password = "";$database ="test";$db = mysql_connect($host,$userName,$password);if (!$db){die("Could not connect: ".mysql_error());}echo("Connected successfully");mysql_close($db);?>

Funksioni die, ne kete shembull, printon nje mesazh dhe del nga skripti aktual. Ky funksion eshte nje pseudonim i funksionit exit(). Sintaksa eshte die(message)

Page 17: Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

Shembull <?php $db = mysql_connect("localhost","root",""); if (!$db){die("Could not connect: ".mysql_error());}echo("Connected successfully");$db_selected = mysql_select_db("test", $db);if (!$db_selected) {    die ("Can\'t use test : ".mysql_error());}mysql_close($db);?>

Page 18: Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

18

Kapercimi i gabimeve me operatorin e Kontrollit te Gabimeve

Ne menyre default, funksionet ne paketen mysql i shfaqin gabimet dhe lajmerimet kur ato ndodhin

Perdorni operatorin e kontrollit te gabimeve (@) per te kapercyer mesazhet e gabimeve

Ky operator mund t’i shtohet çdo shprehjeje

Page 19: Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

Ekzekutimi i shprehjeve SQLPerdorni funksionin mysql_query() per te

derguar shprehje SQL tek MySQLSintaksa e funksionit mysql_query() eshte:

mysql_query(query [, connection]);

Page 20: Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

Ekzekutimi i shprehjeve SQL (vazhd)

Funksioni mysql_query() kthen nje nga tri vlerat: 1) Per shprehjet SQL qe nuk kthejne rezultate

(CREATE DATABASE dhe CREATE TABLE) kthen nje vlere TRUE nese shprehja u ekzekutua me sukses

2) Per shprehjet SQL qe kthejne rezultate (SELECT) funksioni mysql_query() kthen nje shenjues rezultati qe perfaqeson rezultatet e query-tNje shenjues rezultati eshte nje tip i veçante variabli qe

i referohet rreshtit aktual te zgjedhur ne nje bashkesi rezultatesh (resultset)

3) Funksioni mysql_query() kthen nje vlere FALSE per çdo shprehje SQL qe deshton, pavaresisht nese ato kthejne rezultate apo jo.

Page 21: Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

Shembull <?php

// This could be supplied by a user, for example$firstname = 'fred';$lastname  = 'fox';

// Formulate Query. This is the best way to perform an SQL query$query = sprintf("SELECT firstname, lastname, address, age FROM friends WHERE firstname='%s' AND lastname='%s'",    mysql_real_escape_string($firstname),    mysql_real_escape_string($lastname));

// Perform Query$result = mysql_query($query);// Check result This shows the actual query sent to MySQL, and the error. Useful for debugging.if (!$result) {    $message  = 'Invalid query: ' . mysql_error() . "\n";    $message .= 'Whole query: ' . $query;    die($message);}// Use result. Attempting to print $result won't allow access to information in the resource// One of the mysql result functions must be used.  See also mysql_result(), mysql_fetch_array(), mysql_fetch_row(), etc.while ($row = mysql_fetch_assoc($result)) {    echo $row['firstname'];    echo $row['lastname'];    echo $row['address'];    echo $row['age'];}// Free the resources associated with the result set . This is done automatically at the end of the scriptmysql_free_result($result);?>

Page 22: Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

Shtimi, Fshirja dhe Modifikimi i RekordevePer te shtuar rekorde ne nje tabele, perdrni

fjalet kyçe INSERT dhe VALUES me funksionin mysql_query()

Per te shtuar shume rekorde ne nje databaze, perdorni shprehjen LOAD DATA bashke me emrin e skedarit tekst lokal qe permban rekordet qe doni te shtoni

Per te modifikuar rekordet ne nje tabele perdorni shprehjen UPDATE

22

Page 23: Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

Shtimi, Fshirja dhe Modifikimi i Rekordeve<?php$con = mysql_connect("localhost","peter","abc123");if (!$con)  {  die('Could not connect: ' . mysql_error());  }

mysql_select_db("my_db", $con);

mysql_query("INSERT INTO Persons (FirstName, LastName, Age)VALUES ('Peter', 'Griffin', '35')");

mysql_query("INSERT INTO Persons (FirstName, LastName, Age)

VALUES ('Glenn', 'Quagmire', '33')");

mysql_close($con);?>

From W3c

Page 24: Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

Shtimi, Fshirja dhe Modifikimi i Rekordeve

Per te fshire rekordet ne nje tabele perdorni shprehjen DELETE me funksionin mysql_query()

Per te fshire te gjithe rekordet ne tabele, hiqeni pjesen WHERE

24

Page 25: Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

Shtimi, Fshirja dhe Modifikimi i Rekordeve

<?php$con = mysql_connect("localhost","peter","abc123");if (!$con)  {  die('Could not connect: ' . mysql_error());  }

mysql_select_db("my_db", $con);

mysql_query("UPDATE Persons SET Age = '36'WHERE FirstName = 'Peter' AND LastName = 'Griffin'");

mysql_close($con);?>

From W3c

Page 26: Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

26

Marrja e rekordeve ne nje vektor te indeksuar

Funksioni mysql_fetch_row() kthen fushat ne rreshtin aktual te bashkesise se rezultateve ne nje vektor te indeksuar dhe e con shenjuesin e rezultatit ne rreshtin tjeter.

echo "<table width='100%‘ border='1'>";echo "<tr><th>Make</th><th>Model</th>

<th>Price</th><th>Quantity</th></tr>";$Row = mysql_fetch_row($QueryResult);do {

echo "<tr><td>{$Row[0]}</td>";echo "<td>{$Row[1]}</td>";echo "<td align='right'>{$Row[2]}</td>";echo "<td align='right'>{$Row[3]}</td></tr>";$Row = mysql_fetch_row($QueryResult);

} while ($Row);

Page 27: Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

Shembull

27

Page 28: Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

28

Funksioni mysql_affected_rows() Me query qe kthejne rezultate (query SELECT), perdorni funksionin mysql_num_rows() per te gjetur numrin e rekordeve qe kthehen nga query

Me query qe modifikojne tabelat por nuk kthejne resultate (query te tipit INSERT, UPDATE, dhe DELETE), perdorni funksionin mysql_affected_rows() per te percaktuar numrin e rreshtave te prekur.

Page 29: Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

29

Funksioni mysql_affected_rows() (vazhd.)

$SQLstring = "UPDATE company_cars SET mileage=50112.3 WHERE license='AK-1234'";

$QueryResult = @mysql_query($SQLstring, $DBConnect);

if ($QueryResult === FALSE)

echo "<p>Unable to execute the query.</p>"

. "<p>Error code " . mysql_errno($DBConnect)

. ": " . mysql_error($DBConnect) . "</p>";

else

echo "<p>Successfully updated "

. mysql_affected_rows($DBConnect) . " record(s).</p>";

Page 30: Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

30

Figure 8-5 Output of mysql_affected_rows() function for an UPDATE query

Funksioni mysql_affected_rows() (vazhd.)

Page 31: Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

31

Funksioni mysql_info()Per query qe shtojne ose modifikojne rekorde,

ose modifikojne strukturen e nje tabele, perdorni funksionin mysql_info() per te kthyer informacion rreth query-t.

Funksioni mysql_info() kthen numrin e veprimeve per tipe te ndryshme query-sh.

Funksioni mysql_info() kthen informacion rreth query-t te fundit te ekzekutuar ne lidhjen me databazen.

Page 32: Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

32

Funksioni mysql_info() (vazhd.)Funksioni mysql_info() kthen informacion

rreth query-ve qe te nje nga formateve te meposhtme: INSERT INTO...SELECT...INSERT INTO...VALUES (...),(...),(...)LOAD DATA INFILE ...ALTER TABLE ...UPDATE

Per query te tjera, qe nuk pershtaten me keto formate, funksioni mysql_info() kthen nje string bosh. ì

Page 33: Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

33

$SQLstring = "INSERT INTO company_cars " .

" (license, model_year, make, model, mileage) " .

" VALUES " .

" ('CPQ-894', 2011, 'Honda', 'Insight', 49.2), " .

" ('CPQ-895', 2011, 'Honda', 'Insight', 17.9), " .

" ('CPQ-896', 2011, 'Honda', 'Insight', 22.6)";

$QueryResult = @mysql_query($SQLstring, $DBConnect);

if ($QueryResult === FALSE)

echo "<p>Unable to execute the query.</p>"

. "<p>Error code " . mysql_errno($DBConnect)

. ": " . mysql_error($DBConnect) . "</p>";

else {

echo "<p>Successfully added the record.</p>";

echo "<p>" . mysql_info($DBConnect) . "</p>";

}

Funksioni mysql_info() (vazhd.)

Page 34: Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

34

Figure 8-6 Output of mysql_info() function for an INSERT query that adds multiple records

Funksioni mysql_info() (vazhd.)

Page 35: Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

35

Funksioni mysql_info() gjithashtu kthen informacion per query te tipit LOAD DATA$SQLstring = "LOAD DATA INFILE 'company_cars.txt' INTO TABLE company_cars;";$QueryResult = @mysql_query($SQLstring, $DBConnect);if ($QueryResult === FALSE) echo "<p>Unable to execute the query.</p>" . "<p>Error code " . mysql_errno($DBConnect) . ": " . mysql_error($DBConnect) . "</p>";else { echo "<p>Successfully added the record.</p>"; echo "<p>" . mysql_info($DBConnect) . "</p>";}

Funksioni mysql_info() (vazhd.)

Page 36: Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

36

Figure 8-7 Output of mysql_info() function for a LOAD DATA query

Funksioni mysql_info() (vazhd.)

Page 37: Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

Puna me rezultatet e Query-ve

37

Page 38: Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

Marrja e rekordeve me nje vektor te indeksuar

Funksioni mysql_fetch_row() kthen fushat ne rreshtin aktual te bashkesise se rezultateve dhe i vendos ato ne nje vektor te indeksuar dhe e leviz shenjuesin e rezultateve ne rreshtin tjeter.

38

Page 39: Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

$SQLstring = "SELECT * FROM company_cars";$QueryResult = @mysql_query($SQLstring, $DBConnect);echo "<table width='100%' border='1'>\n";echo "<tr><th>License</th><th>Make</th><th>Model</th> <th>Mileage</th><th>Year</th></tr>\n";while (($Row = mysql_fetch_row($QueryResult)) !== FALSE) {

echo "<tr><td>{$Row[0]}</td>"; echo "<td>{$Row[1]}</td>"; echo "<td>{$Row[2]}</td>"; echo "<td align='right'>{$Row[3]}</td>"; echo "<td>{$Row[4]}</td></tr>\n";}echo "</table>\n";

39

Marrja e rekordeve me nje vektor te indeksuar

Page 40: Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

40

Figure 8-8 Output of the company_cars table in a Web Browser

Marrja e rekordeve me nje vektor te indeksuar

Page 41: Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

41

Funksioni mysql_fetch_assoc() kthen fushat ne rreshtin aktual te bashkesise se rezultateve dhe i vendos ato ne nje vektor te shoqeruar dhe e leviz shenjuesin e rezultateve ne rreshtin tjeter.

Ndryshimi ndermjet mysql_fetch_assoc() dhe mysql_fetch_row() eshte qe ne vend te kthimit te fushave ne nje vektor te indeksuar, funksioni mysql_fetch_assoc() i kthen fushat ne nje vektor te shoqeruar dhe perdor secilin emer fushe si çeles te vektorit.

Marrja e rekordeve me nje vektor te shoqeruar

Page 42: Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

42

Mbyllja e Rezultateve te Query-ve

Kur te keni mbaruar punen me rezultatet e query-ve te marra nga funksioni mysql_query(), perdorni funksionin mysql_free_result() per te mbyllur bashkesine e rezultateve

Per te mbyllur bashkesine e rezultateve, kalojini funksionit mysql_free_result() variablin qe permban shenjuesin e rezultatit nga funksioni mysql_query()

Page 43: Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

43

Aksesimi i Informacionit te Rezultatit te Query-ve

Funksioni mysql_num_rows() kthen numrin e rreshtave ne rezultatin e nje query

Funksioni mysql_num_fields() kthen numrin e fushave ne rezultatin e nje query

Te dy funksionet pranojne si argument nje variabel te lidhjes me databazen.

Page 44: Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

44

Aksesimi i Informacionit te Rezultatit te Query-ve (vazhd.)

$SQLstring = "SELECT * FROM company_cars";

$QueryResult = @mysql_query($SQLstring, $DBConnect);

if ($QueryResult === FALSE)

echo "<p>Unable to execute the query.</p>"

. "<p>Error code " . mysql_errno($DBConnect)

. ": " . mysql_error($DBConnect) . "</p>";

else

echo "<p>Successfully executed the query.</p>";

$NumRows = mysql_num_rows($QueryResult);

$NumFields = mysql_num_fields($QueryResult);

if ($NumRows != 0 && $NumFields != 0)

echo "<p>Your query returned " . mysql_num_rows($QueryResult) . " rows and "

. mysql_num_fields($QueryResult) . " fields.</p>";

else

echo "<p>Your query returned no results.</p>";

mysql_close($DBConnect);

Page 45: Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

45

Aksesimi i Informacionit te Rezultatit te Query-ve (vazhd.)

Figure 8-10 Output of the number of rows and fields returned from a query

Page 46: Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

Pyetje?

Page 47: Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se

ReferencePer informacione me te detajuara mund te

kosultoheni me manualin e MySQL ne adresen:

http://www.php.net/manual/en/ref.mysql.php