Leksion 13 - PowerPoint PPT Presentation

1 / 47
About This Presentation
Title:

Leksion 13

Description:

Aksesimi i bazes se te dhenave MySQL nepermjet PHP-se Leksion 13 – PowerPoint PPT presentation

Number of Views:72
Avg rating:3.0/5.0
Slides: 48
Provided by: elm123
Category:
Tags: leksion | mysql | with

less

Transcript and Presenter's Notes

Title: Leksion 13


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

2
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

3
Arkitektura e nje baze te dhenash ne web
  • Nje transaksion tipik i bazes se te dhenave web
    perbehet nga etapat e meposhtme
  • 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
  • Web serveri merr kerkesen per results.php, merr
    skedarin dhe ia dergon ate motorit te PHP-se per
    procesim.

4
Arkitektura e nje baze te dhenash ne web
  1. Motori PHP fillon duke analizuar (parsing)
    skriptin. Brenda skriptit eshte nje komande per
    tu 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.
  2. 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
  3. 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.
  4. Web Serveri e kalon HTML-ne ne browser, ku
    perdoruesi mund te shohe listen e librave qe ka
    kerkuar.

5
Percaktimi se cilen Pakete MySQL duhet te perdorni
  • 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.

6
Hapja dhe mbyllja e nje lidhjeje MySQL
  • 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 ti jepet si vlere nje variabli ne menyre
    qe te aksesoni databazen brenda skriptit tuaj.

7
Hapja dhe mbyllja e nje lidhjeje MySQL (vazhd.)
  • 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

8
Hapja dhe mbyllja e nje lidhjeje MySQL (vazhd.)
  • 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)

9
Hapja dhe mbyllja e nje lidhjeje MySQL (vazhd.)

10
Hapja dhe mbyllja e nje lidhjeje MySQL (vazhd.)
  • Figure 8-1 MySQLInfo.php ne nje Web browser

11
Hapja dhe mbyllja e nje lidhjeje MySQL (vazhd.)
  • 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.

12
Hapja dhe mbyllja e nje lidhjeje MySQL (vazhd.)
  • 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.

13
Raportimi i gabimeve MySQL
  • 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

14
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()

15
Zgjedhja e nje Databaze
  • Sintaksa 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 tu lidhur
    me nje server MySQL dhe per te zgjedhur nje
    databaze.

16
Shembull
  • lt?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)
  • ?gt
  • 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)

17
Shembull
  • lt?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)
  • ?gt

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 (_at_)
    per te kapercyer mesazhet e gabimeve
  • Ky operator mund ti shtohet çdo shprehjeje

19
Ekzekutimi i shprehjeve SQL
  • Perdorni funksionin mysql_query() per te derguar
    shprehje SQL tek MySQL
  • Sintaksa e funksionit mysql_query() eshte
  • mysql_query(query , connection)

20
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-t
  • Nje 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.

21
Shembull
  • lt?php// This could be supplied by a user, for exa
    mplefirstname  'fred'lastname   'fox'// 
    Formulate Query. This is the best way to perform 
    an SQL queryquery  sprintf("SELECT firstname, l
    astname, address, age FROM friends WHERE firstname
    's' AND lastname's'",    mysql_real_escape_st
    ring(firstname),    mysql_real_escape_string(la
    stname))// Perform Queryresult  mysql_query(
    query)// Check result This shows the actual que
    ry sent to MySQL, and the error. Useful for debugg
    ing.if (!result)     message   'Invalid quer
    y ' . mysql_error() . "\n"    message . 'Whol
    e query ' . query    die(message)// Use r
    esult. Attempting to print result won't allow ac
    cess to information in the resource// One of the 
    mysql result functions must be used.
     See also mysql_result(), mysql_fetch_array(), mys
    ql_fetch_row(), etc.while (row  mysql_fetch_ass
    oc(result))     echo row'firstname'    ech
    o row'lastname'    echo row'address'    
    echo row'age'// Free the resources associat
    ed with the result set . This is done automaticall
    y at the end of the scriptmysql_free_result(resu
    lt)?gt

22
Shtimi, Fshirja dhe Modifikimi i Rekordeve
  • Per 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

23
Shtimi, Fshirja dhe Modifikimi i Rekordeve
  • lt?phpcon mysql_connect("localhost","peter","ab
    c123")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)
    ?gt

24
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

25
Shtimi, Fshirja dhe Modifikimi i Rekordeve
  • lt?phpcon mysql_connect("localhost","peter","a
    bc123")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)?gt

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 "lttable width'100 border'1'gt"
  • echo "lttrgtltthgtMakelt/thgtltthgtModellt/thgt
  • ltthgtPricelt/thgtltthgtQuantitylt/thgtlt/trgt"
  • Row mysql_fetch_row(QueryResult)
  • do
  • echo "lttrgtlttdgtRow0lt/tdgt"
  • echo "lttdgtRow1lt/tdgt"
  • echo "lttd align'right'gtRow2lt/tdgt"
  • echo "lttd align'right'gtRow3lt/tdgtlt/trgt"
  • Row mysql_fetch_row(QueryResult)
  • while (Row)

27
Shembull
  • lt?phpconn  mysql_connect("localhost", "mysql_u
    ser", "mysql_password")if (!conn)     echo "
    Unable to connect to DB " . mysql_error()    ex
    it  if (!mysql_select_db("mydbname"))     e
    cho "Unable to select mydbname " . mysql_error()
        exitsql  "SELECT id as userid, fullnam
    e, userstatus         FROM   sometable        WH
    ERE  userstatus  1"result  mysql_query(sql)
    if (!result)     echo "Could not successfull
    y run query (sql) from DB " . mysql_error()   
     exitif (mysql_num_rows(result)  0)     
    echo "No rows found, nothing to print so am exitin
    g"    exit// While a row of data exists, pu
    t that row in row as an associative array// Note
     If you're expecting just one row, no need to use
     a loop// Note If you put extract(row) inside 
    the following loop, you'll  then create userid, 
    fullname, and userstatuswhile (row  mysql_fetc
    h_assoc(result))     echo row"userid"    e
    cho row"fullname"    echo row"userstatus"
    mysql_free_result(result)?gt

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.

29
Funksioni mysql_affected_rows() (vazhd.)
  • SQLstring "UPDATE company_cars SET
    mileage50112.3 WHERE license'AK-1234'"
  • QueryResult _at_mysql_query(SQLstring,
    DBConnect)
  • if (QueryResult FALSE)
  • echo "ltpgtUnable to execute the query.lt/pgt"
  • . "ltpgtError code " . mysql_errno(DBConnect)
  • . " " . mysql_error(DBConnect) . "lt/pgt"
  • else
  • echo "ltpgtSuccessfully updated "
  • . mysql_affected_rows(DBConnect) . "
    record(s).lt/pgt"

30
Funksioni mysql_affected_rows() (vazhd.)
Figure 8-5 Output of mysql_affected_rows()
function for an UPDATE query
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.

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. ì

33
Funksioni mysql_info() (vazhd.)
  • 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 _at_mysql_query(SQLstring,
    DBConnect)
  • if (QueryResult FALSE)
  • echo "ltpgtUnable to execute the query.lt/pgt"
  • . "ltpgtError code " . mysql_errno(DBConnect)
  • . " " . mysql_error(DBConnect) . "lt/pgt"
  • else
  • echo "ltpgtSuccessfully added the
    record.lt/pgt"
  • echo "ltpgt" . mysql_info(DBConnect) .
    "lt/pgt"

34
Funksioni mysql_info() (vazhd.)
Figure 8-6 Output of mysql_info() function for
an INSERT query that adds multiple records
35
Funksioni mysql_info() (vazhd.)
  • Funksioni mysql_info() gjithashtu kthen
    informacion per query te tipit LOAD DATA
  • SQLstring "LOAD DATA INFILE 'company_cars.txt'
  • INTO TABLE company_cars"
  • QueryResult _at_mysql_query(SQLstring,
    DBConnect)
  • if (QueryResult FALSE)
  • echo "ltpgtUnable to execute the query.lt/pgt"
  • . "ltpgtError code " . mysql_errno(DBConnect)
  • . " " . mysql_error(DBConnect) . "lt/pgt"
  • else
  • echo "ltpgtSuccessfully added the
    record.lt/pgt"
  • echo "ltpgt" . mysql_info(DBConnect) .
    "lt/pgt"

36
Funksioni mysql_info() (vazhd.)
Figure 8-7 Output of mysql_info() function for a
LOAD DATA query
37
Puna me rezultatet e Query-ve
38
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.

39
Marrja e rekordeve me nje vektor te indeksuar
  • SQLstring "SELECT FROM company_cars"
  • QueryResult _at_mysql_query(SQLstring,
    DBConnect)
  • echo "lttable width'100' border'1'gt\n"
  • echo "lttrgtltthgtLicenselt/thgtltthgtMakelt/thgtltthgtModellt/
    thgt
  • ltthgtMileagelt/thgtltthgtYearlt/thgtlt/trgt\n"
  • while ((Row mysql_fetch_row(QueryResult)) !
    FALSE)
  • echo "lttrgtlttdgtRow0lt/tdgt"
  • echo "lttdgtRow1lt/tdgt"
  • echo "lttdgtRow2lt/tdgt"
  • echo "lttd align'right'gtRow3lt/tdgt"
  • echo "lttdgtRow4lt/tdgtlt/trgt\n"
  • echo "lt/tablegt\n"

40
Marrja e rekordeve me nje vektor te indeksuar
Figure 8-8 Output of the company_cars table in a
Web Browser
41
Marrja e rekordeve me nje vektor te shoqeruar
  • 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.

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()

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.

44
Aksesimi i Informacionit te Rezultatit te
Query-ve (vazhd.)
  • SQLstring "SELECT FROM company_cars"
  • QueryResult _at_mysql_query(SQLstring,
    DBConnect)
  • if (QueryResult FALSE)
  • echo "ltpgtUnable to execute the query.lt/pgt"
  • . "ltpgtError code " . mysql_errno(DBConnect)
  • . " " . mysql_error(DBConnect) . "lt/pgt"
  • else
  • echo "ltpgtSuccessfully executed the
    query.lt/pgt"
  • NumRows mysql_num_rows(QueryResult)
  • NumFields mysql_num_fields(QueryResult)
  • if (NumRows ! 0 NumFields ! 0)
  • echo "ltpgtYour query returned " .
    mysql_num_rows(QueryResult) . " rows and "
  • . mysql_num_fields(QueryResult) . "
    fields.lt/pgt"
  • else
  • echo "ltpgtYour query returned no
    results.lt/pgt"
  • mysql_close(DBConnect)

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
46
  • Pyetje?

47
Reference
  • Per informacione me te detajuara mund te
    kosultoheni me manualin e MySQL ne adresen
  • http//www.php.net/manual/en/ref.mysql.php
Write a Comment
User Comments (0)
About PowerShow.com