MySQL adatbázis-műveletek a PHP-ban (adatbázis-kapcsolat létrehozása, bezárása, tábla létrehozása, rekord hozzáadása, törlése, módosítása, lekérdezések írása)

Ebben a cikkben a PHP nyelven történő MySQL adatbázis műveleteket fogjuk bemutatni objektumorientáltan. Először ismertetjük az adatbázis fogalmát, majd a MySQL-ét, majd áttérünk a PHP-ban történő adatbázis műveletekre, például az adatbázis-kapcsolat létrehozásra, bezárásra, tábla létrehozásra, rekord hozzáadásra, törlésre, módosításra és a lekérdezések írására.

MySQL adatbázis-műveletek a PHP-ban (adatbázis-kapcsolat létrehozása, bezárása, tábla létrehozása, rekord hozzáadása, törlése, módosítása, lekérdezések írása) című cikk borítóképe

MySQL adatbázis-műveletek a PHP-ban (adatbázis-kapcsolat létrehozása, bezárása, tábla létrehozása, rekord hozzáadása, törlése, módosítása, lekérdezések írása)

Ebben a cikkben a PHP nyelven történő MySQL adatbázis műveleteket fogjuk bemutatni objektumorientáltan. Először ismertetjük az adatbázis fogalmát, majd a MySQL-ét, majd áttérünk a PHP-ban történő adatbázis műveletekre, például az adatbázis-kapcsolat létrehozásra, bezárásra, tábla létrehozásra, rekord hozzáadásra, törlésre, módosításra és a lekérdezések írására.

Mi az az adatbázis?

Szakmailag megfogalmazva azt mondhatjuk, hogy az adatbázis azonos jellemzőjű, strukturált adatok összessége, amelyet egy az adatok tárolására, lekérdezésére és szerkesztésére alkalmas szoftvereszköz kezel. Az adatbázisok segítségével az adatokat megbízhatóan, hosszú távon tartósan (perzisztensen) tárolhatjuk. Illetve az adatbázis gyors visszakereshetőséget biztosít az adatok között. Az adatbázis működtetésére, a benne tárolt adatok kezelésére adatbáziskezelőt használunk.

Kicsit egyszerűbben fogalmazva elmondhatjuk, hogy egy adatbázisban adatokat tárolunk, melyeket lekérdezhetünk, manipulálhatunk. Rengeteg különböző helyzetben használhatunk adatbázisokat, hogy adataink strukturáltak és könnyen lekérdezhetőek legyenek. Egy adatbázis lekérdezéssel másodpercek alatt megtudjuk mondani, hogy hány vásárlónk volt egy adott hónapban. Ezeket az adatokat listázhatjuk akár kosárérték alapján is.

Egy weboldal esetében általában felhasználókhoz köthető adatokat szoktunk adatbázisokban tárolni, például az email címüket, jelszavaikat, feltöltött tartalmaikat vagy például a fent említett esetben a rendeléseik részleteit.

Mi az a MySQL és MySQLi?

Ahhoz, hogy adatbázist készíthessünk vagy műveleteket végezhessünk rajta, szükségünk van egy adatbázis-kezelő rendszerre. A MySQL az egyik legjobban elterjedt adatbázis-kezelő.

A MySQL egy többfelhasználós SQL-alapú relációs adatbázis-kezelő szerver/rendszer, mely egyszerre költséghatékony és egyszerűen beállítható megoldást biztosít bárki számára. A MySQL szinte minden platformra elérhető, többek között Linux-ra, Windows-ra, Mac OS X-re és FreeBSD-re is, így a legtöbb rendszer esetében ez biztosítja az adatbázisokhoz való hozzáférést.

Az adatbázisok kezeléséhez elengedhetetlen egy adatbázis-kezelő telepítése, például a fent említett MySQL. A MySQL letölthető a hivatalos weboldalról vagy a XAMPP szoftvercsomag részeként.

A MySQLi a MySQL egy továbbfejlesztett változata, amelyet a PHP programozás során használni fogunk. Linuxon és Windows-on az esetek döntő többségében automatikusan feltelepül a PHP-val együtt, de akinek mégis hiányozna, az innen letöltheti.

Kapcsolódás MySQL adatbázishoz (connect)

Legelőször kezdjük az adatbázis kapcsolódással. Ha elkészítettük az adatbázist, akkor a PHP-ban mielőtt nekilátnánk lekérdezéseket írni vagy adatokat hozzáadni PHP-ból, előtte mindenképp csatlakoznunk kell az adatbázishoz. Az adatbázisunknak minden esetben lennie kell egy szervercímének, egy felhasználónevének és egy jelszavának.

Szintaxis

new mysqli(SZERVERCÍM, FELHASZNÁLÓNÉV, JELSZÓ, ADATBÁZISNÉV)
Code language: PHP (php)

A kapcsolódás valójában ebből az egyetlen egy sorból áll, de a lenti példából látni fogjátok, hogy érdemes még pár sorral kiegészíteni, hogy a kódunk átláthatóbb, könnyebben módosítható és minden igényt kielégítő legyen.

Példa MySQL kapcsolódáshoz PHP nyelv alatt

PHP kód

<?php
  // adatok felvétele a kapcsolathoz
  $servername = "localhost";
  $username = "felhasznalo";
  $password = "jelszo";
  $dbname = "adatbazis";

  $conn = new mysqli($servername, $username, $password, $dbname); // kapcsolat létrehozása

  // kapcsolódás ellenőrzése
  if ($conn->connect_error) {
    die("Sikertelen kapcsolódás: " . $conn->connect_error); // sikertelen kapcsolódás
  } else {
    echo "Sikeres kapcsolódás."; // sikeres kapcsolódás
  }
?>
Code language: PHP (php)

A fenti példában láthatjuk, hogy a legelején felvesszük az adatbázis kapcsolódáshoz szükséges adatokat (szervercím, felhasználónév, jelszó, adatbázis) különböző változókba, melyeket egy sorral lentebb behelyettesítünk a mysqli kapcsolatlétesítési függvénybe. Mindezt elmentjük egy változóba, hogy pár sorral lejjebb letudjuk ellenőrizni, hogy a kapcsolódás sikeres volt-e vagy sem.

Érdemes most megemlíteni, hogy az adatbázis műveleteknek PHP-ban nincs szemmel látható eredménye, hiszen az összes művelet az adatbázisban fut le. Szemmel látható eredménye, maximum akkor van, ha kiíratjuk például egy lekérdezés eredményét.

MySQL adatbáziskapcsolat lezárása PHP-ban (close)

Ha megnyitunk egy adatbázis kapcsolatot, akkor azt be is kell zárnunk. A kapcsolat automatikusan bezárul, ha a szkript futása véget ér, de szerencsére lehetőségünk van arra is, hogy idő előtt bezárjuk a kapcsolatot.

Szintaktika

close()

Nemes egyszerűséggel a létrehozott kapcsolatra ki kell adnunk a close() utasítást.

Példa MySQL adatbáziskapcsolat lezárására PHP nyelv alatt

PHP kód

<?php
  // adatok felvétele a kapcsolathoz
  $servername = "localhost";
  $username = "felhasznalo";
  $password = "jelszo";
  $dbname = "adatbazis";

  $conn = new mysqli($servername, $username, $password, $dbname); // kapcsolat létrehozása

  // kapcsolódás ellenőrzése
  if ($conn->connect_error) {
    die("Sikertelen kapcsolódás: " . $conn->connect_error); // sikertelen kapcsolódás
  } else {
    echo "Sikeres kapcsolódás."; // sikeres kapcsolódás
  }

  // kapcsolat lezárása
  $conn->close();
?>
Code language: PHP (php)

Tábla létrehozása MySQL adatbázisban (create)

Ebben a leckében nem az a cél, hogy megértessük, hogy pontosan mi is az és hogy hogyan működnek az adatbázisok, azaz nem magyarázunk el minden egyes adatbázisos fogalmat, hiszen ez egy PHP lecke. De röviden az adatbázisban található táblákban tároljuk a logikailag összefüggő adatokat. A tábla oszlopokból és sorokból áll, melyeket mezőknek, illetve rekordoknak nevezünk. Például egy webshop mögött lévő adatbázis esetében lenne egy külön táblánk a felhasználói adatok számára, például a felhasználónév, az email cím és a jelszó számára.

A tábla létrehozásához ismernünk kell a MySQL-ben használatos szintaktikát a táblák létrehozására.

MySQL-ben így néz ki egy tábla létrehozásának a szintaxisa

CREATE TABLE TÁBLANÉV (
    MEZŐ1 ADATTÍPUS OPCIONÁLIS.TULAJDONSÁG,
    MEZŐ2 ADATTÍPUS OPCIONÁLIS.TULAJDONSÁG,
    MEZŐ3 ADATTÍPUS OPCIONÁLIS.TULAJDONSÁG
    ...
);
Code language: SQL (Structured Query Language) (sql)

Először is a „CREATE TABLE” kulcsszó után meg kell adnunk, hogy milyen névvel szeretnénk a táblára hivatkozni, majd egy sima nyitózárójel után elkezdjük felsorolni a mezőket (oszlopokat). Először jön a mező neve, majd az adattípusa. Ha szeretnénk akkor opcionálisan különböző tulajdonságokat is odabiggyeszthetünk, például, hogy az adott mező nem lehet NULL, vagy hogy automatikusan növekvő értéket kapjon.

Szintaxis

query(SQL.KÓD)
Code language: PHP (php)

Példa tábla létrehozására MySQL adatbázisban PHP nyelv alatt:

PHP kód

<?php
  // adatok felvétele a kapcsolathoz
  $servername = "localhost";
  $username = "felhasznalo";
  $password = "jelszo";
  $dbname = "adatbazis";

  $conn = new mysqli($servername, $username, $password, $dbname); // kapcsolat létrehozása

  // kapcsolódás ellenőrzése
  if ($conn->connect_error) {
    die("Sikertelen kapcsolódás: " . $conn->connect_error); // sikertelen kapcsolódás
  } else {
    echo "Sikeres kapcsolódás."; // sikeres a kapcsolódás
  }

  // SQL kód tábla létrehozáshoz
  $sql = "CREATE TABLE programnyelvek (
              id INT(5) AUTO_INCREMENT PRIMARY KEY,
              nev VARCHAR(30) NOT NULL,
              megjelenesi_ev DATE
          )";

  // létrehozás sikerességének leellenőrzése
  if ($conn->query($sql) === false) {
    echo "Hiba a tábla létrehozása során: " . $conn->error;
  } else {
    echo "Sikeres a tábla létrehozása.";
  }

  // kapcsolat lezárása
  $conn->close();
?>
Code language: PHP (php)


Ebben a példában készítettünk egy SQL kódot, amelyet az „$sql” változóban mentettünk el. Ez az SQL kód a tábla létrehozását valósítja meg. A tábla neve „programnyelvek”, melynek három mezője van, az első egy id, amelynek értéke automatikusan fog növekedni, történetesen ez az elsődleges kulcs is. A név egy szöveges mező, melynek értéke nem lehet NULL. A legutolsó mező pedig a megjelenési év, melynek típusa dátum.

Új sor (rekord) hozzáadása táblához MySQL adatbázisban (insert)

Most, hogy már van adatbázisunk és táblánk is, amihez hozzáadhatunk adatokat, épp itt az ideje, hogy meg is tegyük.


Van pár szabály, amelyet be kell tartanunk az SQL kód megírása során:

  • a lekérdezésnek idézőjelek között kell lennie
  • a szövegeket és a dátumtípusú értékeket aposztróf közé kell helyeznünk
  • a számokat és a NULL értéket nem kell sem idézőjelek, sem aposztrófok közé tenni


Továbbá természetesen itt is figyelembe kell vennünk az SQL szintaxis szabályait. Azaz elsősorban egy olyan lekérdezést kell írnunk, amely MySQL-ben is lefut, aztán kell a fent említett módosításokat is megejtenünk.


Így néz ki egy szintaktikailag helyes SQL lekérdezés, amely egy új sort hoz létre:

INSERT INTO TÁBLANÉV (MEZŐ1, MEZŐ2, MEZŐ3 ...)
VALUES (ÉRTÉK1, ÉRTÉK2, ÉRTÉK3 ...)
Code language: SQL (Structured Query Language) (sql)

Természetesen az adatbázisban létező táblanevet és mezőneveket kell megadnunk!

Példa új sor (rekord) hozzáadására táblához MySQL adatbázisban PHP nyelv alatt:

PHP kód

<?php
  // adatok felvétele a kapcsolathoz
  $servername = "localhost";
  $username = "felhasznalo";
  $password = "jelszo";
  $dbname = "adatbazis";

  $conn = new mysqli($servername, $username, $password, $dbname); // kapcsolat létrehozása

  // kapcsolódás ellenőrzése
  if ($conn->connect_error) {
    die("Sikertelen kapcsolódás: " . $conn->connect_error); // sikertelen kapcsolódás
  } else {
    echo "Sikeres kapcsolódás."; // sikeres a kapcsolódás
  }

  // új sor hozzáadása
  $sql = "INSERT INTO programnyelvek (nev, megjelenesi_ev) VALUES ('PHP', '1995-06-08')";

  // új rekord hozzáadásának leellenőrzése
  if ($conn->query($sql) === false) {
    echo "A rekord hozzáadása nem sikerült: " . $conn->error;
  } else {
    echo "Sikeres rekordhozzáadás";
  }

  // kapcsolat lezárása
  $conn->close();
?>
Code language: PHP (php)


Ebben a példában a létrehozott SQL lekérdezést úgy írtuk meg, hogy figyelembe vettük az összes fenti utasítást. Kiváltképp arra kellett figyelnünk, hogy a szöveget és a dátumot aposztrófok közé tegyük. Majd végül leellenőriztük, hogy a hozzáadás sikeres volt-e vagy sem.

Lekérdezés MySQL adatbázisban (select)

Miután a táblánkban már vannak adatok is, lehetőségünk van arra, hogy különböző lekérdezéseket írjunk. Ezekkel a lekérdezésekkel például kilistázhatjuk az összes programnyelvet, amelyet felvittünk az adatbázisba, de akár azt is megtehetjük, hogy csak a 2000-nél régebbi programnyelveket kérdezzük le.

SQL lekérdező szintaxis

SELECT mező(k).neve(i) FROM táblanév
Code language: SQL (Structured Query Language) (sql)

A mezők neveihez azokat a neveket kell írnunk, amelyek a táblában léteznek és szeretnénk, hogy eredményként megjelennének. Például, ha írunk egy ilyen lekérdezést:

SELECT id, nev, megjelenesi_ev FROM programnyelvek
Code language: SQL (Structured Query Language) (sql)

Akkor ez lesz az eredménye:

idnevmegjelenesi_ev
1PHP1995-06-08
2JavaScript1995-12-04
3Java1996-01-23

Az „id, nev, megjelenesi_ev” helyett írhattam volna csillagot („*”) is, hiszen ezzel kilistázzuk az összes oszlopot. Ha csak a nevüket szerettem volna kilistázni, akkor így kellett volna írnom:

SELECT nev FROM programnyelvek
Code language: SQL (Structured Query Language) (sql)

Melynek ez lesz az eredménye:

nev
PHP
JavaScript
Java

Példa lekérdezés írására MySQL adatbázisban PHP nyelv alatt

PHP kód

<?php
  // adatok felvétele a kapcsolathoz
  $servername = "localhost";
  $username = "felhasznalo";
  $password = "jelszo";
  $dbname = "adatbazis";

  $conn = new mysqli($servername, $username, $password, $dbname); // kapcsolat létrehozása

  // kapcsolódás ellenőrzése
  if ($conn->connect_error) {
    die("Sikertelen kapcsolódás: " . $conn->connect_error); // sikertelen kapcsolódás
  } else {
    echo "Sikeres kapcsolódás."; // sikeres a kapcsolódás
  }

  // lekérdezés
  $sql = "SELECT id, nev FROM programnyelvek";

  $result = $conn->query($sql);

  // eredmény kiíratása
  if ($result->num_rows > 0) { // ha a lekérdezésnek van eredménye, akkor belépünk az if-be
    while($row = $result->fetch_assoc()) { // amíg van rekord, addig kiírom őket
      echo "id: " . $row["id"]. ", név: " . $row["nev"]. "<br>";
    }
  } else {
    echo "A lekérdezésnek nincs eredménye."; // nincs eredmény
  }

  // kapcsolat lezárása
  $conn->close();
?>
Code language: PHP (php)

Eredmény

id: 1, név: PHP
id: 2, név: JavaScript
id: 3, név: Java


A fenti kódban megírtuk a lekérdezésünket, amely szerint az „id” és a „nev” mezőket szeretnénk lekérdezni. A lekérdezés eredményét eltároljuk a „$result” változóban. Majd következik az eredmény kiíratása. Először megvizsgáljuk, hogy a sorok száma nagyobb-e, mint nulla, mivel ha nem nagyobb, akkor nincs mit kiíratnunk, így fölösleges belépnünk a kiíratáshoz. Ha nagyobb, akkor a lekérdezésünk eredménnyel tért vissza, készítünk egy while ciklust, amely addig megy, amíg a „$row” nem tér vissza null értékkel. Akkor fog null értékkel visszatérni, amikor már nincs több sor. A while ciklus magjában egyszerűen kiíratjuk az id-t és a nevet.

Rekord módosítása MySQL adatbázisban (update)

Nem csak arra van lehetőségünk, hogy adatokat vigyünk fel a táblába, hanem arra is, hogy egy már meglévő rekord értékeit módosítsuk.

SQL szintaxis rekord módosítására

UPDATE táblanév
SET mező1=érték1, mező2=érték2 ...
WHERE feltétel
Code language: SQL (Structured Query Language) (sql)

Fontos, hogy olyan feltételt írjunk, amely csak a módosítandó rekord(ok)ra érvényes, mert ha a feltételünk nem helyes, akkor olyan rekord(ok) is módosulni fog(nak), amely(ek)nek nem kellene.

Példa rekord módosításra MySQL adatbázisban PHP nyelv alatt

PHP kód

<?php
  // adatok felvétele a kapcsolathoz
  $servername = "localhost";
  $username = "felhasznalo";
  $password = "jelszo";
  $dbname = "adatbazis";

  $conn = new mysqli($servername, $username, $password, $dbname); // kapcsolat létrehozása

  // kapcsolódás ellenőrzése
  if ($conn->connect_error) {
    die("Sikertelen kapcsolódás: " . $conn->connect_error); // sikertelen kapcsolódás
  } else {
    echo "Sikeres kapcsolódás."; // sikeres a kapcsolódás
  }

  // rekordmódosító SQL kód
  $sql = "UPDATE programnyelvek SET nev='Python', megjelenesi_ev='1991-02-20' WHERE nev='Java'";

  // rekord módosításának ellenőrzése
  if ($conn->query($sql) === false) {
    echo "A rekord módosítása nem sikerült: " . $conn->error;
  } else {
    echo "Sikeres rekordmódosítás.";
  }

  // kapcsolat lezárása
  $conn->close();
?>
Code language: PHP (php)


A fenti kódban megírtuk, hogy a „programnyelvek” adatbázisban módosuljon „Python”-ra a „nev” mező/oszlop és ‘1991-02-20’-ra a „megjelenesi_ev” mező/oszlop, ott ahol a „nev=’Java'”. Ezzel azt értük el, hogy a módosítás csak ott történik meg, ahol a név a Java. Majd futtattuk az utasítást és leteszteltük, hogy helyesen futott-e le vagy sem.

Rekord törlése MySQL adatbázisban (delete)

Fentebb taglaltuk egy rekord módosításának a módszerét, ám van olyan, amikor nem elég egy rekordot módosítanunk, hanem teljesen törölnünk kell. Szerencsére erre is van lehetőségünk a PHP-ban.

SQL törlés szintaxisa

DELETE FROM táblanév
WHERE feltétel
Code language: SQL (Structured Query Language) (sql)

Természetesen itt is kínosan ügyelnünk kell arra, hogy tökéletes feltételt szabjunk, hogy csak olyan rekordok törlődjenek, amelyeket valóban törölni szeretnénk!

Példa rekord törlésére MySQL adatbázisban PHP nyelv alatt

PHP kód

<?php
  // adatok felvétele a kapcsolathoz
  $servername = "localhost";
  $username = "felhasznalo";
  $password = "jelszo";
  $dbname = "adatbazis";

  $conn = new mysqli($servername, $username, $password, $dbname); // kapcsolat létrehozása

  // kapcsolódás ellenőrzése
  if ($conn->connect_error) {
    die("Sikertelen kapcsolódás: " . $conn->connect_error); // sikertelen kapcsolódás
  } else {
    echo "Sikeres kapcsolódás."; // sikeres a kapcsolódás
  }

  // rekordtörlő SQL kód
  $sql = "DELETE FROM programnyelvek WHERE nev='Python'";

  // rekord törlésének ellenőrzése
  if ($conn->query($sql) === false) {
    echo "A rekord törlése nem sikerült: " . $conn->error;
  } else {
    echo "Sikeres rekordtörlés.";
  }

  // kapcsolat lezárása
  $conn->close();
?>
Code language: PHP (php)


A fenti példában semmit sem módosítottunk az előzőhöz képest, csak annyit, hogy átírtuk az SQL utasítást, mely szerint törli a programnyelvekből azt a rekordot, ahol a „nev” egyenlő „Python”-nal.

Ha hasznos volt számodra, akkor kérlek oszd meg másokkal is, hogy ezzel támogass minket!