Ndodheni ne: Guidat / MySQL
Bazat e MySQL me PHP 1 – SELECT, INSERT, UPDATE dhe DELETE

Bazat e MySQL me PHP 1 – SELECT, INSERT, UPDATE dhe DELETE

Nga më 16 March 2010 në MySQL me 19 Komente

MySQL është një sistem administrimi databazash i thjeshtë e i fuqishëm. Duke përdorur PHP do të mësoni veprimet themelore e më të rëndësishme të MySQL.

Sapo dëgjon fjalën MySQL, menjëherë të vjen ndërmend PHP dhe kjo është shumë normale. PHP dhe MySQL janë zgjidhja e kombinuar e shumë programuesve sepse kanë të përbashkët 2 elementë të rëndësishëm: 1) janë teknologji Open Source dhe 2) janë të lehta për tu mësuar, por të fuqishme në të njëjtën kohë.

Qëllimi im me këtë guidë është t’ju mësoj bazat e zgjedhjes, rifreskimin, shtimin dhe fshirjen e të dhënave në MySQL duke përdorur PHP. Ju që nuk keni njohuri në PHP mos u shqetësoni sepse do të përdor vetëm disa funksione bazë e do i shpjegoj që mos të jeni konfuz në asgjë.

Fuqia dhe thjeshtësia e gjuhës SQL (të cilën përdor dhe MySQL) është pikërisht sintaksa e saj që ngjan më shumë me një fjali normale të gjuhës angleze se sa me një gjuhë programimi. Jam i sigurt që do i fiksoni shumë shpejt ato që do të shpjegoj nëse dini pak anglisht, por edhe nëse jo, mos u bëni merak.

Lidhja me databazën

Përpara se t’ju shpjegoj se si të dërgoni query në MySQL, do ju shpjegoj si të lidheni me serverin e databazës dhe si të zgjidhni databazën me të cilën do të punojmë. Për këtë guidë, kam krijuar një databazë “feniksi” dhe një tabelë të quajtur “produktet” e cila ka strukturën e mëposhtëme:

Tabela “Produktet”
——————
id – INT – PRIMARY – AUTO INCREMENT
titulli – TINYTEXT
permbajtja – TEXT

Pasi e krijojmë, shtojmë gjithashtu disa të dhëna të cilat do na shërbejnë për shembujt në vijim:

id – titulli – permbajtja
————————-
1 – televizor – nje televizor i bukur per shtepine tuaj
2 – celular – nje celular me te cilin mund te shfletoni ne internet
3 – laptop – nje laptop 15 inch per perdorim te perditshem

Hapni një dokument të ri PHP dhe shkruani kodin e mëposhtëm. Zëvendësoni vlerën e variablave $hosti, $emri, $fjalekalimi me vlerat që përkojnë me serverin tuaj të databazës. Në një mjedis lokal tipik do të kishit: hosti = localhost, emri = root, fjalekalimi = fjalekalimijuaj.

 PHP |  Kopjo Kodin |? 
01
<?php
02
$hosti = 'hosti';
03
$emri = 'emri';
04
$fjalekalimi = 'fjalekalimi';
05
 
06
// mysql_connect() eshte funksioni i cili ben lidhjen me serverin e databazës, 
07
// ndërsa mysql_select_db() zgjedh databazën me të cilën duam të punojmë
08
$lidhja = mysql_connect($hosti, $emri, $fjalekalimi) or die('Nuk u krye lidhja me databazen');
09
mysql_select_db('feniksi');
10
?>

Kodi më sipër duhet të jetë në krye të çdo kodi tjetër që merr të dhëna nga databaza. Në shembujt në vijim unë nuk e kam shkruar për të mos e përsëritur, por që kodet të funksionojnë rregullisht, duhet ta kopjoni pjesën e mësipërme në krye.

SELECT: Zgjedhja e të dhënave

Fjala kyçe SELECT shërben për të zgjedhur të dhëna nga tabela në mënyrë që të shfaqen apo përpunohen me PHP. Le të shohim një shembull të thjeshtë ku marrim disa të dhëna nga tabela jonë fiktive dhe i printojmë në Browser me PHP.

 PHP |  Kopjo Kodin |? 
1
<?php
2
$rezultatet = mysql_query("SELECT id, titulli FROM produktet");
3
 
4
while($vlerat = mysql_fetch_array($rezultatet)){
5
	echo $vlerat['id'] . '-' . $vlerat['titulli'] . '<br />';
6
}
7
?>

Kodi i mësipërm do të printojë:

1-televizor
2-celular
3-laptop

Ata që nuk kanë eksperiencë me PHP mund të ndihen pak konfuz por mos u shqetësoni; gjithçka që kemi bërë tani është shumë e thjeshtë. Fillimisht i kemi dërguar serverit MySQL një query përmes funksionit mysql_query(), i cili është funksioni bazë për të ndërvepruar me MySQL. Më pas i kam kthyer të dhënat e marra në një vektor të asociuar (me marrëdhënie çelës=>vlerë, ku çelësat janë kolonat e tabelës) përmes mysql_fetch_array() dhe kam naviguar përmes rreshtave të tabelës me ndihmën e loop-ës while(). Printimi i të dhënave duhet të jetë vetë-shpjegues; s’kam bërë më tepër se të printoj id-në, një minus, titullin dhe një ulje rreshti me HTML.

Tani që diskutuam bazat e ndërtimit të një query dhe shfaqjes së të dhënave, le të kalojmë më tej në disa opsione që mund ti shtojmë fjalës kyçe SELECT për të ngushtuar mënyrën e kërkimit.

Fillimisht do të përdorim fjalën kyçe WHERE, e cila na lejon të zgjedhim të dhëna në bazë të një kriteri. Në shembullin më poshtë, kam zgjedhur rreshtin e tabelës ku id është 1. Praktikisht rezultati do të jetë vetëm një rresht, sepse vetëm një ka id-në 1.

 PHP |  Kopjo Kodin |? 
1
<?php $rezultatet = mysql_query("SELECT titulli FROM produktet WHERE id=1"); ?>

Po nëse duam që rezultatet e kthyera ti rendisim alfabetikisht sipas një kolone? Shembujt më poshtë do ju tregojnë si ta arrini këtë. ORDER BY përcakton që rezultatet do të renditen sipas kolonës së dhënë, ndërsa pjesa DESC instrukton që renditja të jetë zbritëse. E kundërta do të ishte ASC për rritëse.

 PHP |  Kopjo Kodin |? 
1
<?php
2
//renditi te dhenat sipas titullit nga germa A ne Z
3
$rezultatet = mysql_query("SELECT id, titulli FROM produktet ORDER BY titulli");
4
 
5
//ose
6
 
7
//renditi te dhenat sipas titullit nga germa Z ne A
8
$rezultatet = mysql_query("SELECT id, titulli FROM produktet ORDER BY titulli DESC");
9
?>

UPDATE: Rifreskimi i të dhënave

Në seksionin mësipër ju tregova si të zgjidhni të dhëna e ti printoni ato, por një veprim i nevojshëm është gjithashtu rifreskimi/ndryshimi i të dhënave. Kjo realizohet përmes fjalës kyçe UPDATE. Në shembullin më poshtë do të ndryshoj titullin dhe permbajtjen e rreshtit me id 1.

 PHP |  Kopjo Kodin |? 
1
<?php $rezultatet = mysql_query("UPDATE produktet SET titulli='televizor hd', permbajtja='nje televizor hd per shtepine tuaj' WHERE id=1"); ?>

Si mund ta shikoni, sintaksa është përsëri e thjeshtë. Kolonat që dëshironi të rifreskoni ndahen me presje dhe në fund vendoset WHERE për të përcaktuar cili rresht.

INSERT: Shtimi i të dhënave

Sintaksa e shtimit të të dhënave ndryshon paksa nga SELECT dhe UPDATE, por përsëri do të ketë shumë sens për ju. Në shembullin më poshtë do të shtoj një rresht në tabelën tonë produktet:

 PHP |  Kopjo Kodin |? 
1
<?php
2
$rezultatet = mysql_query("INSERT INTO produktet (titulli, permbajtja)
3
			   VALUES ('mp3 player', 'nje mp3 player per te shtyre kohen e lire')");
4
?>

Mënyra si e kam shkruar kodin më sipër është tërësisht e pranueshme sepse hapësirat (1 apo më shumë) nuk kanë rëndësi. Megjithatë, forma e mësipërme na lejon të shkruajme query më të rregullta, sidomos kur janë të gjata. Mund të keni vënë re gjithashtu që kolonën id nuk e kam përfshirë në query dhe kjo jo sepse kam harruar, por sepse e kam deklaruar gjatë krijimit të kolonave si një fushë AUTO INCREMENT. Fushat AUTO INCREMENT rriten automatikisht me 1 kur një rresht shtohet në tabelë.

DELETE: Fshirja e të dhënave

Fshirja ngjan shumë me SELECT si sintaksë e nuk mendoj se kërkon shumë shpjegime për atë që bën. Në shembullin më poshtë kam fshirë rreshtin me id 3 nga tabela:

 PHP |  Kopjo Kodin |? 
1
<?php $rezultatet = mysql_query("DELETE FROM produktet WHERE id=3"); ?>

Tashmë besoj se e keni kuptuar si MySQL funksionon duke cekur bazat e saj. Ka shumë fjalë kyçe të tjera të cilat ju lejojnë të bëni veprime më të avancuara me të dhënat, por çfarë keni mësuar deri tani do ju shërbejnë për të krijuar programe të thjeshta. Në guidat e ardhshme do t’ju mësoj si të bëni veprimet: shuma, mesatarja, minimumi, maksimumi, grupimi, numërimi, lidhjet tabelash, etj. Deri atëherë shpresoj të keni përvetësuar këto që ju kam treguar sot.

Mësim të mbarë.

Fadion Dashi

Fadioni është prej shumë vitesh i apasionuar pas internetit dhe punon freelance si dizenjues dhe programues per web. Kur nuk është duke punuar, i pëlqen të shkruajë, të fotografojë, të admirojë koleskionin e tij të aparatëve fotografikë manualë dhe të kalojë kohë të bukur me miqtë.

19 Komente

  1. Denis D. says:

    Mendoj se ky artikull duhet te kaloje tek zona PREMIUM :) ))
    Shume bukur zotni ;) Pune te mbare ne vazhdim :)

  2. Te pjesa e SELECT DISTINCT Fadioni ka perdorur nje “loop” while sepse ka dashur te shfaqi te gjitha rezultatet.
    Nese doni qe te shfaqni vetem nje te dhene perdorni dikret “$vlerat = mysql_fetch_array($rezultatet);”

    Se mos iu kam ber me konfuz, vetem do hiqni while(…) { … }

  3. Romeo Shuka says:

    Mendoj se ky artikull duhet te kaloje tek zona PREMIUM :) ))
    Shume bukur zotni ;)Pune te mbare ne vazhdim :)   

    Flm per fjalet por nuk duam te monopolizojme zonen Premium e te tjeret te mendojne qe ne shkruajme vetem per ate. Kini pak durim sepse jemi duke punuar per nje artikull mjaft te mire per Premium e kur ta mbarojme do e vini re. Ateher do te shihni vertete ca cilesie do te kete.
    Flm per fjalet e mira.

  4. Fadion Dashi says:

    @Joni, DISTINCT se kam perdorur sepse eshte ne plan per guida te tjera. Sidoqofte, shtimi jot eshte i drejte sepse eshte e vertete: per query qe kthejne 1 rezultat, nuk ka nevoje te futen ne loop while().

    Thnx.

  5. Dashi says:

    Flm per fjalet por nuk duam te monopolizojme zonen Premium e te tjeret te mendojne qe ne shkruajme vetem per ate. Kini pak durim sepse jemi duke punuar per nje artikull mjaft te mire per Premium e kur ta mbarojme do e vini re. Ateher do te shihni vertete ca cilesie do te kete.
    Flm per fjalet e mira.  

    Romeo, nuk e kisha per vete mik :) Por ky me duket leksion teper profesional, te cilin pak kund e gjen free fare (te perkthyer po them)

  6. Romeo Shuka says:

    Romeo, nuk e kisha per vete mik :)Por ky me duket leksion teper profesional, te cilin pak kund e gjen free fare (te perkthyer po them)  

    Flm edhe ty per ato qe thua. Qellimi yne eshte pikerisht ai qe ti ofrojme lexuesve guida profesionale edhe te bera e thjeshtesuara per tu kuptuar. Me besoni kur ju them qe per guida te tilla na marrin mbi 4-5 ore pune. Plus qellimi jone me Premium nuk eshte qe te behemi te pasur, por te mesohen Shqiptaret qe te paguajne per dicka cilesore edhe per te na falenderuar ne nje fare menyre per punen qe bejme.

  7. Fadion Dashi says:

    Dashi (dmth Denisi?). Me vjen mire qe te pelqen dhe qe te duket i vlefshem.

    Ideja e Premium eshte qe te permbaje guida te medha e te thelluara nga te cilat mund te perfitosh shume me teper se nga guidat normale. Psh, smund te krahasosh kete guide me Projektin CMS! :)

  8. Nikolin says:

    po nqs duam ti fshijme qe te gjitha te dhenat si veprohet?

    FLm

  9. Dashi says:

    Dashi (dmth Denisi?). Me vjen mire qe te pelqen dhe qe te duket i vlefshem.Ideja e Premium eshte qe te permbaje guida te medha e te thelluara nga te cilat mund te perfitosh shume me teper se nga guidat normale. Psh, smund te krahasosh kete guide me Projektin CMS!   

    Ok, nje far menyre po … por kur te ndertosh te gjith setin jo vetem leksionin 1 athere esht shume mire …. (pastaj ju shikoni nivelin mesatar shqiptar more miq) .. Ju free fusni si te ndertoni faqen me HTML, CSS si te perdorni DreamWeaver ose FontPage , si te perdorni javascript dhe disa nga kto tipe… si te perdorni CPanel, si te bleni domaine dhe si te perdorni domainin me host, si te beni nje faqe me wordpress apo joomla etj etj :) …. kto jan free sepse kto jan per masen e gjere, ndersa te tjerat qe jane me elemente teper profesional te kalojne tek premium …
    Nuk e kam ktu qellimin se po i marrin te gjithe, apo se po humbni mundesi te merrni ndonje lek me teper . Jo, se kisha per kete, por kalimi ne premium (qe eshte mjaftueshem lire) rrit serjozitetin dhe duket me teper profesioniste (mendoj une e) …

    Tani me falni se jam qik llapazan :D Po smund te rri pa fol :P
    Gjithsesi, un per mire mendove, po edhe kshtu mire eshte :)
    Suksese ne punen tuaj
    Deno

  10. Fadion Dashi says:

    Nikolin, mund te perdoresh 2 metoda per te fshire te gjitha te dhenat dhe ke zgjedh eshte ne varesi te veprimit.

    “DELETE FROM tabela” fshin te gjitha rreshtat 1 nga 1, qe eshte nje proces i ngadalte per tabela te medha. Kthen numrin e rreshtave te fshire dhe nuk e leviz vleren e AUTO_INCREMENT.

    “TRUNCATE tabela” eshte shume me e shpejte se fshin dhe ri-krijon tabelen, pa pasur nevoje te fshije rresht per rresht. Nuk kthen informacion sa rreshta jane fshire dhe vleren e AUTO_INCREMENT e rezeton ne 0.

    Ne pergjithesi kur fshin te dhenat e nje tabele, nuk te intereson sa rreshta jane prekur dhe cfare vlere ka AUTO_INCREMENT, keshtu qe TRUNCATE eshte ide e mire. Megjithate ka plot raste ku vlen e kunderta dhe duhet te perdoresh DELETE. Zgjedhja jote :)

  11. Fadion Dashi says:

    Dashi, une e kuptoj cfare thua, por qellimi ketu eshte te ndihmojme webin Shqiptar te behet sado pak me i mire. Nese do shkruanim guida free per FrontPage (e perdor me njeri?) dhe si te blesh domain, do nxirrnim jashte loje te gjitha ata qe skane mundesi te paguajne edhe ato pak para qe kerkojme per Premium.

    Nuk po dua te dal jashte teme prandaj e leme kete diskutim. Thjeshte po te them qe guidat Premium do jene goxha interesante per ata qe kane mundesi te paguajne, por guidat free do jene shume me te shpeshta, te te njejtes cilesi, thjeshte pak me te “vogla” ;)

  12. Besfort says:

    Desha t’ju pyes nuk po mundem te marr me nje SQL kod. Qe ne te marr nga dy tabela nga nje vlere.. kam rastin dua te paraqes ne ekran sasin e nje artikulli qe eshte ne stok edhe emrin e nje artikulli qe gjendet ne tabelen artikujt ? nese mundemi mem ndihmu .

  13. Besfort says:

    Dua qe nga tabela stoku_art te marr sasine e produktit dhe nga tabela artikulli te marr emrin e produktit ndersa tek tabela stoku_art kemi nje fushe ku eshte art_id per lidhjen e dy tabelave ? Falemderit shume

  14. Fadion Dashi says:

    Besfort, pa i ditur konkretisht tabelat dhe permbajtjen e tyre veshtire se mund te te sygjeroj. Megjithate, nga cfare po kuptoj te duhet nje JOIN qe te bashkosh te 2 tabelat dhe te marresh rreshtat perkates.

    Edhe pse komentet ne artikuj nuk supozohen te jene ndihme per raste specifike, kete rast po bej perjashtim. Me thuaj cfare kolonash kane tabelat dhe egzaktesisht cfare do te besh.

  15. Fadion Dashi says:

    Atehere perdor nje query te tille (kuptohet duke i nderruar kolonat ashtu si i ke ne tabela):

    SELECT art.titulli, st.stoku FROM artikulli AS art
    INNER JOIN stoku_art AS st ON st.art_id = art.id

    Kjo query te shfaq te gjithe artikujt se bashku me stokun e tyre ne tabelen stoku_art. Nese te duhet vetem per nje artikull te caktuar, mjafton ti shtosh ne fund nje WHERE art.id = XX.

  16. Besfort says:

    Falemderit shume …

  17. Banago says:

    Ka ndonje arsye pse te dhenat e serverit ruhen ne ndryshore dhe nuk shkruhen direkt tek kodi i lidhjes:

    $lidhja = mysql_connect(‘hosti’, ‘root’, ‘pass’) or die(‘Nuk u krye lidhja me databazen’);

    Apo thjeshte praktike e mire?

  18. Fadion Dashi says:

    Thjeshte praktike qe une e perdor sepse e kam me te lehte ti ndryshoj variablat kur bej kalim local>produksion. Nese ty te duket me e lehte ti vendosesh direkt ne funksione, ashtu beje! :)

  19. Kurtt says:

    jam fillestar ne kodim, keshtu qe me hyri shume ne pune ky tutorial.
    Flm stafit.

Shkruaj një Koment