Univerzalna funkcia na insert do databazi
Univerzalna funkcia na insert do databazi
Zdravim vsetkych,
rozhodol som sa trochu postupit v mojich vedomostiach programovania php a chcem sa naucit co najlepsie a najefektivnejsie vyuzivat funkcie.. zatial proceduralne, ale casom by som chcel prejst na OOP (mozno uz aj teraz zistim ze to bude lepsie v OOP).
ide mi tu hlavne o to aku filozofiu vymysliet na nejake univerzalne pridavanie riadkov do databazy.
uvediem priklad: mam rozne tabulky z databazy a ja chcem vytvorit jednu funkciu, ktora bude obsluhovat pridavanie (INSERT) udajov z roznych formularov do roznych tabuliek. Cize bude jedna funkcia ktora podla dat z formularu sama urci do ktorej tabulky tie udaje ma dat, predtym tie udaje osetri od html, prazdnych medzier apod.. (funkcie na ocistenie vstupu od uzivatela).
mal som taku predstavu, ze sa s formularom bude odosielat aj skryty prvok ktory povie do akej tabulky sa bude zapisovat a potom funkcia sama rozhodne do akych stlpcov je potrebne vkladat. No potom som si uvedomil, ze uz v tej funkcii musim urcovat nejake podmienky a priamo sa odkazovat na konkretne tabulky co teda nie je velmi univerzalne.
Podobnu funkciu som chcel aj na update udajov.
Vopred dakujem za kazdy vas napad akym sa posunut dalej a zacat uvazovat trochu programatorsky
rozhodol som sa trochu postupit v mojich vedomostiach programovania php a chcem sa naucit co najlepsie a najefektivnejsie vyuzivat funkcie.. zatial proceduralne, ale casom by som chcel prejst na OOP (mozno uz aj teraz zistim ze to bude lepsie v OOP).
ide mi tu hlavne o to aku filozofiu vymysliet na nejake univerzalne pridavanie riadkov do databazy.
uvediem priklad: mam rozne tabulky z databazy a ja chcem vytvorit jednu funkciu, ktora bude obsluhovat pridavanie (INSERT) udajov z roznych formularov do roznych tabuliek. Cize bude jedna funkcia ktora podla dat z formularu sama urci do ktorej tabulky tie udaje ma dat, predtym tie udaje osetri od html, prazdnych medzier apod.. (funkcie na ocistenie vstupu od uzivatela).
mal som taku predstavu, ze sa s formularom bude odosielat aj skryty prvok ktory povie do akej tabulky sa bude zapisovat a potom funkcia sama rozhodne do akych stlpcov je potrebne vkladat. No potom som si uvedomil, ze uz v tej funkcii musim urcovat nejake podmienky a priamo sa odkazovat na konkretne tabulky co teda nie je velmi univerzalne.
Podobnu funkciu som chcel aj na update udajov.
Vopred dakujem za kazdy vas napad akym sa posunut dalej a zacat uvazovat trochu programatorsky
-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
Re: Univerzalna funkcia na insert do databazi
od tejto myšlienky radšej upusti. Určite je efektívnejšie spraviť pár podmienok ako robiť desiatky dotazov na databázu aby si zistil ktorá má aké stlpce. Nehovoriac o tom, že dve tabuľky môžu mať na vlas identickú štruktúru (počet stlpcov, ich názvy aj dátové typy), no slúžia na niečo iné a potom by si nevedel do ktorej to pridať. Ďalší problém by bol chýbajúci (prevyšujúci) parameter. Takých problémov by sa dalo nájsť toľko, že je to prakticky nereálne niečo také spraviť a aj ak to nejakou obklukou spravíš dostatočne spolahlivo pre tvoju databázu (dá sa baviť o univerzálnosti keď to pôjde iba na tvojej databáze?) tak to bude moc neefektívne
Re: Univerzalna funkcia na insert do databazi
ok, rozumiem a dakujem.. tiez mi to velmi neslo do hlavy ako by to mohlo byt efektivnejsie keby som si kontroloval vsetky tabulky a porovnaval ich. Cize to urobim takpovediac napresno pre tu konkretnu stranku a potreby systemu.
Este otazocka.. cize by sa to nedalo urobit univerzalne ani v OOP? Skoro vobec sa nevyznam v OOP ale ked som si to tak studoval, tak sa tam stale odvolava na to ze triedy a objekty su robene tak ze su univerzalne a teda sa daju pouzivat uz hocikde, na hocakom projekte.
Este otazocka.. cize by sa to nedalo urobit univerzalne ani v OOP? Skoro vobec sa nevyznam v OOP ale ked som si to tak studoval, tak sa tam stale odvolava na to ze triedy a objekty su robene tak ze su univerzalne a teda sa daju pouzivat uz hocikde, na hocakom projekte.
-
harrison314
Hardcore addict
- Príspevky: 8223
- Registrovaný: 27 máj 2009, 20:42
- Bydlisko: Bratislava
- Kontaktovať používateľa:
Re: Univerzalna funkcia na insert do databazi
Ja som si pracu z databazou ulahcil tym, ze trieda, ktora sa my o nu stara dokaze formatovat dopyt.
Teda napisem si vsoubecny dopit, tj. bez hodnot a tie sa tam potom doplnia ked je treba. Aj ked z hladiska efektyvnosti to nie je najidealnejsie.
Ale z hladiska archytektury aplikacie je lepsie pracovat z datami ( napr. objektovy model postaveny nad databazou) a nie z databazou.
Na tu druhu otazku: Nie, tak ako to ty myslis niesu unyverzalne.
Teda napisem si vsoubecny dopit, tj. bez hodnot a tie sa tam potom doplnia ked je treba. Aj ked z hladiska efektyvnosti to nie je najidealnejsie.
Ale z hladiska archytektury aplikacie je lepsie pracovat z datami ( napr. objektovy model postaveny nad databazou) a nie z databazou.
Na tu druhu otazku: Nie, tak ako to ty myslis niesu unyverzalne.
Re: Univerzalna funkcia na insert do databazi
to co ty chces je dnes uplne bezne (a nie len pre inserty) vola sa to ze ORM (object relational mapping), pre kazdy jazyk vratane php je ORM kniznic (frameworkov) neurekom.
Re: Univerzalna funkcia na insert do databazi
Maximalne vseobecnu funkciu by som robil pre konkretnu tabulku. Nejak takto:
1. funkcia Osetri($udaj) - osetruj a vrati na vystupe udaj
Ked si zaciatocnik ako pises, tak funkcie na tabulky mozes urobit namieru tabulky:
2. funkcia pridajDoTabulkyPrva($udaj1, $udaj2, $udaj3, $udaj4, $udaj5) - tu sa predpoklada ze tabulka prva ma 5 stlpcov, pripadne prvy stlpec ID ktory nemenis ale bude tam nastaveny klucovy+autoincrement
3. funkcia pridajDoTabulkyDruha($udaj1, $udaj2, $udaj3) - tu sa predpoklada ze tabulka druha ma 3 stlpce, pripadne to ID
Snad sa chapeme
1. funkcia Osetri($udaj) - osetruj a vrati na vystupe udaj
Ked si zaciatocnik ako pises, tak funkcie na tabulky mozes urobit namieru tabulky:
2. funkcia pridajDoTabulkyPrva($udaj1, $udaj2, $udaj3, $udaj4, $udaj5) - tu sa predpoklada ze tabulka prva ma 5 stlpcov, pripadne prvy stlpec ID ktory nemenis ale bude tam nastaveny klucovy+autoincrement
3. funkcia pridajDoTabulkyDruha($udaj1, $udaj2, $udaj3) - tu sa predpoklada ze tabulka druha ma 3 stlpce, pripadne to ID
Snad sa chapeme
Re: Univerzalna funkcia na insert do databazi
ano, rozumiem a dakujem
.. takto to mam uz aj teraz, ze pre kazdu tabulku mam zvlast funkciu
Len som sa chcel v tomto trochu posunut a skusit urobit nieco pokrocilejsie a univerzalnejsie, no asi na to este nemam vedomosti a budem sa musiet pustit do OOP naplno a potom do nejakeho frameworku, kedze som sa snazil zacat rovno s FW, no tam je vyzadovana znalost OOP a tak som sa tam aj zasekol
Len som sa chcel v tomto trochu posunut a skusit urobit nieco pokrocilejsie a univerzalnejsie, no asi na to este nemam vedomosti a budem sa musiet pustit do OOP naplno a potom do nejakeho frameworku, kedze som sa snazil zacat rovno s FW, no tam je vyzadovana znalost OOP a tak som sa tam aj zasekol
-
jorg22
Medium Professional
- Príspevky: 1087
- Registrovaný: 12 aug 2006, 20:39
- Kontaktovať používateľa:
Re: Univerzalna funkcia na insert do databazi
Ked sa naucis OOP tak ziadne frameworky ani kniznice ci co to je nebudes potrebovat, raz si spravis triedu ktora bude pracovat s databazou a mozes ju vyuzit vo vsetkych projektoch na ktorych budes pracovat. A vyhoda bude taka ze si jednoducho upravis tu triedu ako budes chciet a budes vediet presne ako to funguje takze sa ti to bude lepsie pouzivat.
-
axxis
Addict
- Príspevky: 3690
- Registrovaný: 29 máj 2007, 21:53
- Bydlisko: Spálené mlyny
- Kontaktovať používateľa:
Re: Univerzalna funkcia na insert do databazi
Autor: to sa da vyriesit +/- jednoducho pretazovanim(overloading) triedy, spravis jeden objekt co bude mat metody, ktore sa rovnako volaju, ale budu robit nieco ine na zaklade rozdielnych vstupnych parametrov. navonok sa to bude ale tvarit ako jedina trieda a bude to prehladne (aj ked ja by som to tak urcite nerobil)
bo vsetky projekty, ktore bude v zivote robit budu vyzerat rovnako. Ak mas tuto ultimatnu triedu naprogramovanu (boh ta chran ak si v nej pouzil nejake kniznice, ktore nie su Tvoje!) prosim posli mi ju, alebo ju niekde publikuj. Myslim, ze mas sancu zarobit velke peniaze. Tesim sa na nu ako nahradu za LINQ a Hibernate
vyzera podobe tomuto?
mocny nazor.....zahadzujte kniznice, pomazte si APIcka...jorg22 napísal:Ked sa naucis OOP tak ziadne frameworky ani kniznice ci co to je nebudes potrebovat, raz si spravis triedu ktora bude pracovat s databazou a mozes ju vyuzit vo vsetkych projektoch na ktorych budes pracovat. A vyhoda bude taka ze si jednoducho upravis tu triedu ako budes chciet a budes vediet presne ako to funguje takze sa ti to bude lepsie pouzivat.
bo vsetky projekty, ktore bude v zivote robit budu vyzerat rovnako. Ak mas tuto ultimatnu triedu naprogramovanu (boh ta chran ak si v nej pouzil nejake kniznice, ktore nie su Tvoje!) prosim posli mi ju, alebo ju niekde publikuj. Myslim, ze mas sancu zarobit velke peniaze. Tesim sa na nu ako nahradu za LINQ a Hibernate
vyzera podobe tomuto?
Kód: Vybrať všetko
class Boh {
void do(Object o)
}-
jorg22
Medium Professional
- Príspevky: 1087
- Registrovaný: 12 aug 2006, 20:39
- Kontaktovať používateľa:
Re: Univerzalna funkcia na insert do databazi
Nehovoril som o takej komplexnosti ako su tie kniznice ktore si sem postol. Ale PHP a MySQL su velmi dobre prepojene a vela veci to robi uz za teba. Ak si spravis triedu tak ti ju staci len mierne poupravit pre iny projekt. Ale query si budes musiet skladat sam a to je vyhoda co sa tyka vykonu, robi to co len ty potrebujes.
A neviem odkial mas tu triedu ale je to presne to co som naprogramoval len moja ma este jeden riadok naviac tak preto je taka extremne brutalna.
A neviem odkial mas tu triedu ale je to presne to co som naprogramoval len moja ma este jeden riadok naviac tak preto je taka extremne brutalna.
-
harrison314
Hardcore addict
- Príspevky: 8223
- Registrovaný: 27 máj 2009, 20:42
- Bydlisko: Bratislava
- Kontaktovať používateľa:
Re: Univerzalna funkcia na insert do databazi
Ak mas triedu ktoru musis pri kazdom inom projekte upravovat, znaci to iba to ze je to cele zle, v praci by ti zato odthli hlavu.AK si robis kniznicu tak uz poriadne.jorg22 napísal:a mozes ju vyuzit vo vsetkych projektoch na ktorych budes pracovat. A vyhoda bude taka ze si jednoducho upravis tu triedu ako budes chciet
Dalsou vetou popieras zakladne principi OOP ako open-close princip a abstraktciu od implementacie.
Nie viac ako bezna kniznica na pracu z DB hocikde inde.jorg22 napísal:Ale PHP a MySQL su velmi dobre prepojene a vela veci to robi uz za teba.
-
jorg22
Medium Professional
- Príspevky: 1087
- Registrovaný: 12 aug 2006, 20:39
- Kontaktovať používateľa:
Re: Univerzalna funkcia na insert do databazi
tak som sa zle vyjadril, tu triedu nemusim upravovat. A cely cas hovorim o PHP nie o inych jazykoch lebo inde som MySQL este nepouzil. A hlavnou myslienkou bolo to ze si hocikto moze spravit taku triedu a nemusi sa ucit s cudzimi triedami.
-
axxis
Addict
- Príspevky: 3690
- Registrovaný: 29 máj 2007, 21:53
- Bydlisko: Spálené mlyny
- Kontaktovať používateľa:
Re: Univerzalna funkcia na insert do databazi
ja stale nechapem ako si to vlastne predsatvujes, taketo nieco by mohlo fungovat maximalne na urovni interface-u. Je uplne jedno aky jazyk alebo aku DB pouzijes proste nemozes ocakavat, ze databazu knih budes spravovat rovnako ako databazu videi. A vobec, mohol by si mi ukazat ako si to vlastne predsatvujes?jorg22 napísal:tak som sa zle vyjadril, tu triedu nemusim upravovat. (fuck yeah! zrodila sa abslutna databazova trieda, netreba ju nikdy upravovat, uz vie uplne vsetko a tym mam na mysli vsetko) A cely cas hovorim o PHP nie o inych jazykoch lebo inde som MySQL este nepouzil. A hlavnou myslienkou bolo to ze si hocikto moze spravit taku triedu a nemusi sa ucit s cudzimi triedami.
A navyse o uceni sa "cudzich tried" je v sucasnosti vacsina programovania. Vsetky jednoduche ulohy uz boli implementovane a mozes mi verit, ze omnoho efektivnejsie ako keby si to robil Ty. Ked sa to naucis spravne vyuzivat budes schopny programovat mnohonasobne rychlejsie a efektivnejsie ( a navyse neviem ci si niekedy videl certifikacne skusky napr. od MS alebo pre javu, ale na vsetkych je prave len to ci si schopny pouzivat tie zbytocne "cudzie kniznice", to ze vies napisat SELECT * FROM ... alebo cyklus nikoho neohuri a ani nezaujima ). A okrem toho, videl si napr. JPA (java persistance API)? Nemusis nic programovat iba si napises jednoduchu anotaciu a mas ORM hotove.
(anotacia vyzera napr. takto: @ManyToMany) a ak pouzivas LINQ nemusis voboec nic, lebo pomocou lambda metod integrovali query priamo do jazyka, takze si proste niekde urpostred kodu pises dotazy a ono Ti to vracia krasne iterovatelne objekty.