MySQL és PHP, adatok kinyerése

Írta: | 2007. szeptember 11. | kategóriák: Adattárolás, MySQL, PHP, Programozás

A leírásban megtanuljuk kiválasztani a nekünk megfelelő adatbázist, a táblázatok kezelését parancsok lefuttatásával, adatok kinyerését és az eredmény által elfoglalt memória kiürítését. Mi a metodológia? Először is kell csatlakozzunk az sql szerverhez, majd kiválasztani a megfelelő adatbázist. Létre kell hozzuk a parancsunkat és le kell futtasuk azt. Majd a visszatérített adatokat lekezeljük. Utolsó lépésekként, űrítjük a használt memóriát, majd lezárjuk a kapcsolatot. A csatlakozást és a kapcsolat lezárását már leírtam, most a köverkező függvényekkel foglalkozunk: mysql_select_db, mysql_query, mysql_fetch_assoc, mysql_free_result.

mysql_select_db()

A parancs segítségével kiválaszthatjuk az adatbázist, amelyen dolgozni szeretnénk. Az összes mysql_query a kijelölt adatbázison fog végrehajtódni. Két paramétere van, bár csak az első a kötelező. Az első paraméter egy karakterlánc, amely az adatbázis nevét tartalmazza. A második paraméter a kapcsolat azonosítót adja meg, amennyiben egyszerre több kapcsolaton is tevékenykedünk. A visszatérített értékek True és False, a sikerességtől függően. A True értéket abban az esetben kapjuk, amennyiben sikeres volt az adatbázis kiválasztása. Ha nem létezik vagy valami oknál fogva nem lehet csatlakozni az adatbázishoz, a visszatérített érték False lesz.

mysql_query()

A függvény segítségével különböző sql parancsokat futtathatunk, így példáúl adatokat szúrhatunk be a táblázatokba vagy akár táblázatot is létrehozhatunk, de törölhetünk is. Egy szóval bármilyen sql parancsot le tudunk futtatni. A függvény használatához szükségünk van egy alap sql nyelv tudásra.

A függvény szintén két paramátert vár, az első a parnacs, egy karakterlánc formájában, a második a kapcsolat azonosító. A kapcsolat azonosító ez esetben sem kötelező paraméter. Amennyiben nem volt meghatározva a kapcsolat, akkor az utoljára létrehozott kapcsoaltot használja. Ha azonban nem volt létrehozva kapcsolat, akkor megpróbál egyet létrehozni meghívva a mysql_connect függvényt paraméterek nélkül.

A függvény a megadott parancstol függően különböző értékeket térít vissza. Sikertelen esetekben Flase a visszatérített érték. A SELECT, SHOW, DESCRIBE és EXPLAIN parancsokra, siker esetén az eredmény azonosítóját téríti vissza. UPDATE, DELETE, DROP és hasonló parnacsok esetén True a siker jele.

mysql_fetch_assoc()

A függvény segítségével egy asszociatív tömböt térít vissza. A paramétere egy eredmény azonosító, amelyet a mysql_query térített vissza. Hiba esetén False értéket ad. Érdemes megjegyezni, hogy a függvény gyors, case-sensitive és az sql NULL mezőket átalakítja a php NULL értékre.

mysql_free_result()

A függvény nem feltétlen jellegű. Mivel a lefoglalt memória mindig kiűrítődik a kód lefutásának a végén, nem fontos meghívnunk külön a függvényt, mégis, jobb külön üríteni a memóriát, ha egy nagyobb kérést intézünk az sql szerver fele. Példáúl, ha lekérjük egy fórum üzeneteit, majd egy más művelet is akarunk futtatni, jobb, hogyha egyszer ürítjük a memóriát.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
  $kapcsolat = @mysql_connect("szerver", "felasznalo", "jelszo"); //a @ blokkolja a php altal kiirando hibat
  if ( !$kapcsolat ){
    die("Nem tudok csatlakozni.");
  }
 
  $valasz = @mysql_select_db("adatbazis");
 
  if ( !$valasz ){
  	die("Nem tud csatlakozni az adatbazishoz!");
  }
 
  $parancs = "SELECT * FROM tabla;";
 
  $valasz = @mysql_query($parancs, $kapcsolat);
 
  if ( !$valasz ){
  	die("Nem futott le a patancs!");
  }
 
  while ( $sor = mysql_fetch_assoc($valasz) ){
  	echo "A neved: " . $sor['felhasznaloNev'] . ".";
  }
  mysql_free_result($valasz);
  mysql_close($kapcsolat);


Értékeld a bejegyzést!

Loading ... Loading ...

A bejegyzésre érkező kommenteket elérheted RSS 2.0 formájában vagy emailben is:

A bejegyzéshez tartozó trackback cím, illetve a permalink.

A megjegyzéseket kérlek, tedd fel érthető és illendő módon, ne fikázz le másokat, mert nem tudnak valamit, amit te már igen. A kommentár lehetőleg függjön a bejegyzéshez :)

kötelező
kötelező, titok marad
ha nincs, maradjon üres



végre 🙂 köszi, egy ilyen szűkszavú, de érthető és minden lényegeset leíró szöveget kerestem már egy ideje 🙂

zoleytaylor 2008. január 19. - 15:09

Örülök, hogy tetszik. 🙂

Avatar Tupacko
2008. január 19.
18:14

Jó cikk 🙂

Gameworld 2008. július 18. - 02:15

Sziasztok!

Azt szeretném megkérdezni, hogy egyik tábla utoljára felvett rekordjából hogy nyerem ki az auto_increment azonosítót; mert a következő lépésben ugyanehez az azonosítóhoz tartalmazó tulajdonságokat vinnék be egy másik táblába. pHp-ben kicsit macerás, de szeretném megoldani, hogy mindkét táblából jó összetartozó adatokat nyerjek ki!

Papp Ernő 2008. augusztus 9. - 18:33

Ez egy gyakori kérdés, amikor mélyebben belemászik az ember az SQLezésbe. Sajnos nincs általános megoldás rá, mivel SQL típus függő a dolog.
MySQL esetében a következő képpen nyerheted ki a kívánt értéket:
SELECT LAST_INSERT_ID() as `utolsoID`
MSSQL esetében meg így:
SELECT @@Identity AS [@@Identity], SCOPE_IDENTITY() AS [SCOPE_IDENTITY]

Megjegyezném, hogy az MSSQL esetében azért írtam kétféle megoldást, mert a kettő közt van egy árnyalatnyi eltérés. Ha valakit érdekel, szívesen elmondom, amit tudok.

Avatar Tupacko
2008. augusztus 9.
19:31

Köszi Tupacko!
Ez az első problémára talán megoldás, ahol azonosító szerint szeretném szétszedni a kreált táblát.
A következőben LAST_INSERTED_ID-val is kivehetem, de ott növekményes az azonosító és új adatok bevitelénél többször szúrom be az új táblába:
$id=mysql_query(“select max(azon) as $akt from adatok”);
print $id;
itt az adatok táblából így akartam kinyerni az utolsó zonosítót, mert egyértelmű, hogy a legnagyobb érték.
A print helyére mysql_query(“insert into stilus values ($id); után include-dal teszem be a select multiple-lel a többi adatot, így a $id-hoz több adatot vihetek be a listába. A print az ideiglenes, hogy kiírassam, hogy működik-e.
insert into stilus (select Last_id…)
hatásosabb lenne szerinted?
Szóval itt egy táblát rakunk össze egy korábbi azonosító beszúrásával és a többi mezőt listából visszük be. A felhasználói oldalon az azonosítóhoz tartozó összes adatot ki kell nyernünk mindkét táblából. Arra készül majd a gyorskereső mezőkre.
A last_id-s módszert kipróbálom, remélem, működik majd!
Mégegy, a while ($sor=mysql_fetch_array($sqlkif))
függvénynél hibát jelez néha és többszöri próbálkozásra írja ki tömbelemként a változókat. Ez is kemény küzdelem!
Mégegyszer: Köszönöm a segítséget! Ha újabb problémák lesznek, majd megírom!

Papp Ernő 2008. augusztus 10. - 11:11

Az első egy belépés, ahol az űrlapról egy regisztrált felhasználót azonosít. Itt nem az utolsó beszúrt azonosítóra vagyunk kiváncsiak, hanem a lekérdezett felhasználó azonosítóját visszük tovább belépés után és az kerül a bevitt adatokhoz, hogy elkülönüljön, melyik adatcsoportot, melyik felhasználó vitte be.

Papp Ernő 2008. augusztus 10. - 11:38

Megkérlek ehez hasonló komplex problémával regisztráljatok a fórumba. Szegény WP nem arra volt készítve, hogy egy halom programforrást tároljon kommentekben. Azért nem tudtad elküldeni a hozzaszólásod, mert a spamszűrö nem engedett át. Meg kel hagyni jogosan, mert az SQL szintaxissal feltörhetnéd a blogot, ha sikerülne kreálni egy SQL injectiont.
Köszönöm a megértést.
A témávcal kapcsolatban a válaszom az, hogy abszolut nem biztonságos az, ha adatbeszúrás után úgy veszel ki egy IDt, hogy lekéred azt SELECTtel a táblából. Nem véletlen van a last_insert_id(). Ha továbbra is ugyanazt az IDt kell használd, akkor megjegyzed egy változóban és használod, de hangsúlyozom, a SELECT max(id) FROM tabla téves eredményt ad(hat).

Várlak a fórumban 🙂

Avatar Tupacko
2008. augusztus 10.
21:47

Ezt a last inserted id-t még tovább próbálgatom, ha nem működik, akkor majd írok!

Papp Ernő 2008. augusztus 16. - 12:57

Resource id #2 selectre ezt írja
0 CD stílusai:
Az a baj, hogy csak abban a file-ban működik a mysql_insert_id(), ahol történt a beszúrás, egy későbbi hívásnál 0 az érték, mert itt már elfelejti.
Hogy lehet megoldani, hogy az utolsó beszúrt rekord azonosítóját későbbi lépésben kinyerjük és felhasználjuk?

Papp Ernő 2008. augusztus 16. - 15:23