Skip to content
This repository was archived by the owner on Jul 8, 2020. It is now read-only.

Database Access

Laborci Gergely edited this page Aug 10, 2017 · 3 revisions

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.

SqlBuilder

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>18

Adatlekérdező metódusok

getRows(string $sql, ...$sqlParams)

Ez az alapműködés. Visszaadja a sorokat az SQL-ed alapján.


getRowsWithKey(string $sql, ...$sqlParams)

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.


getRow(string $sql, ...$sqlParams)

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.


getRowById(string $table, int $id)

Egy sort ad vissza a megadott táblából, mégpedig az id mezőre szűrve.


getRowsById(string $table, array $ids)

Nagyon hasonló a getRowById-hoz, csak több sort ad vissza, hiszen több azonosítót is fogad az $ids tömbben.


getValue(string $sql, ...$sqlParams)

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

getValues(string $sql, ...$sqlParams)

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.


getValuesWithKey(string $sql, ...$sqlParams)

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.

Beszúrás

insert(string $table, array $data, bool $ignore = false):int

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.

Módosítás

update(string $table, Filter $filter, array $data):int

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.


updateById(string $table, int $id, array $data):int

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örlés

delete(string $table, Filter $filter):int

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.


deleteById(string $table, int $id):int

Egy sort töröl a táblából a megadott azonosító alapján.

Escape & Quote

Ezeket a metódusokat ritkán kell használni, úgy alakítottuk ki a rendszert, hogy ahol csak lehet, ott automatikusan legyenek használva.

buildSQL(string $sql, array $sqlParams = []):string
quote($subject, bool $quote = true):string
quoteArray(array $array, bool $quote = true):array
escapeSQLEntity($subject):string
escapeSQLEntities(array $array):array

Tranzakció kezelés

beginTransaction():bool
commit():bool
rollBack():bool
inTransaction():bool

Tábla struktúra lekérdezés / manipuláció

tableExists(string $table):bool
getTableType(string $table):string
renameTable(string $from, string $to):void
addTable(string $table, string $properties):void
deleteTable(string $table):void
addView(string $view, string $select):void
deleteView(string $view):void

Adatbázis mező lekérdezés / manipuláció

fieldExists(string $table, string $field):bool
addField(string $table, string $field, string $properties):void
deleteField(string $table, string $field):void
getFieldList(string $table):array
getFieldData(string $table):array
getEnumValues(string $table, string $field):array

Clone this wiki locally