-
Notifications
You must be signed in to change notification settings - Fork 0
Database Access
Adatbázis hozzáférés.
Magát a kapcsolatot kezelő osztály, konstruktorában egy connection url-t kap, amiben minden, a kapcsolat felépítéshez szükséges paraméter szerepel. Az access nagyon sok metódussal segíti a hozzáférést az adatbázishoz, melyek között szerepel az összes CRUD metódus és még egy rakás egyéb segédmetódus is.
Mielőtt a lekérdezések részletezéséről olvashatnál, ismerd meg az SqlBuildert. Elég sok lekérdező metódus (és egyéb az Access-re épülő osztályok metódusai is) ugyan azt szignatúrát használja, ezért érdemes most elolvasnod, hogy mit is tud ez a funkció.
method(string $sql, ...$sqlParams)Ez egy nagyon egyszerű és nagyon kényelmes interface-t kínál az SqlInjection támadásokkal szemben, ugyanis a paramétereket nem az sql-be kell befűzd kézzel, hanem rábízod az SqlBuilderre az alábbiak szerint. Amellett, hogy a funkció hasznos, a használata olvashatóvá teszi a kódodat is.
Az SqlBuilder nagyon egyszerű string behelyettesítésen alapul, viszont minden paraméterként átadott értéket escape-el, ezzel védekezve például az SQL Injectionnel szemben, illetve segít az SqlEntitások neveinek escape-elésében is. Amennyiben $1, $2,\$3, stb stringeket talál le, akkor azt értékként kezeli, ha @1, @2, @2 akkor pedig Sql Entitásként, azaz például tábla, vagy mezőnévként.
$rows = $access->getRows("SELECT * FROM @1 WHERE id=$2 AND age>$3", 'user', 12345, 18);SELECT * FROM `user` WHERE id='12345' AND age>18Ez az alapműködés. Visszaadja a sorokat az SQL-ed alapján.
Nagyon hasonlít a getRows-ra, a különbség annyi, hogy a sorokat egy asszociatív tömbben adja vissza, mégpedig úgy, hogy az eredmény első oszlopa lesz a tömb kulcsa.
Egyetlen egy sort ad vissza. Ha az sql-ed alapján több sor is lenne az eredmény, csak az első lesz az, amit ez a hívás válaszként ad.
Egy sort ad vissza a megadott táblából, mégpedig az id mezőre szűrve.
Nagyon hasonló a getRowById-hoz, csak több sort ad vissza, hiszen több azonosítót is fogad az $ids tömbben.
Egyetlen egy (az első) sornak egyetlen egy (az első) értékét fogja visszaadni.
$userName = $access->getValue("SELECT name FROM user WHERE id=$1", $userId);Lekérdezi az sql alapján, de csak az első oszlopot adja vissza, nem a teljes sorokat. Így tudsz lekérdezni például csak e-mail címeket egy user táblából.
A getValues-hoz hasonlóan értékeket ad vissza, mégpedig az SQL-edben szereplő második mező alapján, ugyanis az első mező a visszaadott asszociatív tömb kulcsa lesz.
A nevének megfelelően egy sort szúr be a paraméterként kapott táblába ($table). Az adatokat egy asszociatív tömbben kell átadnod ($data). Ha INSERT IGNORE szerű beszúrást szeretnéd, akkor az $ignore argumentumot igazra kell állítanod. A metódus a beszúrt sor azonosítójával tér vissza.
Az insert-hez hasonló szignatúrával találkozhatsz az update metódusban is. Meg kell adnod, hogy melyik táblába ($table) milyen adatokat ($data) szeretnél módosítani. Visszatérési értékként a módosított rekordok számát kapod.
Viszont észreveheted, hogy egy új argumentumot is használunk ($filter), ami egy Filter példány. Ezzel az objektummal az UPDATE sql WHERE szegmensét tudod egyszerűen definiálni.
Nagyon hasonló a fenti update metódushoz, csak ez a szűréshez nem egy Filtert használ, hanem egyetlen sort módosít a megadott $id szerint.
Töröl a megadott táblából a megadott Filterre szűrve. Visszatérésként a törölt sorok számát adja vissza.
Egy sort töröl a táblából a megadott azonosító alapján.
Ezeket a metódusokat ritkán kell használni, úgy alakítottuk ki a rendszert, hogy ahol csak lehet, ott automatikusan legyenek használva.