Anonymní profil Milan – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Milan – Programujte.comAnonymní profil Milan – Programujte.com

 

Příspěvky odeslané z IP adresy 91.127.59.–

Milan
PHP › PHP & MySQL ochrana databaze
2. 3. 2023   #391132

#21 Kit
Za prve serial sa neda pouzit na ID, na to tu je BIG INT s velkostou 8bajtov (2^64). Za druhe tu nejde o pocet dosptupnych ID a ako som tu aj pisal , ide o nabublani velkosti DB. Priklad hovoris tu o puziti 2^64 to je 64bitov. Pri puziti MEDIUM INT (3bajty = 2^24 coz je nieco na 16milionov). A ta zaberana velkost je uplatnena vsade tak kde je to puzite, jednak priamov taj tabulke a jednak vsade v dalsich tabulkach kde je referencia na to ID danej tabulky. Pri velkej DB napriklad kde mas 10milionov zaznamov mas 10^6 * (64-24) = 40*10^6 b = 4.8MB pri jednej tabulky a to este nepocitat ine tabulky kde mas prepojenia. Pri pouziti tvojej logiky to ale pouzijes na kazdej tabulke. Pri malych veciach to je jedno ale pri velkych projektoch aj tieto veci hraju velky rolu. Cu projekty kde mas miliardy, triliony zaznamov kde nemas zopar tabuliek ale mas obrovske mnozstvo tabuliek a pri tych.

#22 peter
Bohuzial, ono sa spravi zaznam, ktory nie je vidiet, co sa tyka auto_incrementu vsak to vidiet je, coz je logicke aby nevznikla kolizia a pod commit sa to ukaze az aj v db trvalo. lenze ked pouzijes rollback tak auto_increment ignoruje. Neposnazi sa nastavit na najnizsiu moznu pocitadla od hodnoty ktora bola po vyvolani TRANSSAKTION a zapisu do danej tabulky

Vo vysledku to dopadne tak ze je tak ze pak unikaju dostupne ID a ty to potom musis kompenzovat vacsim datovym typom premennej v tabulkach.

Mam to vyskusane, ze tam nastava problem pri tom pocitadle.

A co sa tyka k udajnemu mojmu urazaniu. Mozno je tam opodstatnena drzost ale nikoho som tu neurazal. Praveze ja mozem byt urazeny ked na otazku, tu dostavam odpovede typu "odpal". Ja sa len branim a snazim sa drzat konstruktivnej rovine. Ono si streba uvedomit aj uz len z jedneho pohladu (akademicky zaujem). cize aj keby to nemalo ziadny prakticky vyznam. Aj v takom najhorsom moznom scenary si nezasluzim aby mi niekdo posielal take odpovede ake posielal, ja sa len snazim branit voci takym odpovedam a to tym ze ich na to upozornim. Toto cele.

Ako riesenie ma napadlo, plnit si array vsade tam kde som robil nejaky zapis (INSERT) a pri rollbacku spustit manualne u vsetkych tych tabuliek prenastavenie ID pocitadla. Ale ma to niekolko negativ. Za prve je to o hubu, a nechce sa mi verit ze by neexistoval iny sposob elegantnejsi, priamov v mysqli o ktorom neviem a nepodarilo sa mi to najst. A za druhe musim pridat permissiu, k moznej manualnej uprave toho pocitadla, coz sa prieci, ze permisie sa nastavaju na minimum. Ak by stranka len citatala tak uzivatel, ktory vyuziva v php na pripojenie ku db bude mat len citanie. Ked zapis tak aj zapis. Nie je dobre napriklad dat root prava :D to by bola cesta do pekla.

Milan
PHP › PHP & MySQL ochrana databaze
1. 3. 2023   #391129

#19 Kit

Hypoteticky:  mas miliony zaznamov, k tomu nejake prepojenia s ostatnymi tabulkami. Tym ze by sa neriesili auto_increment pred rollback, tak to ma dosledok ze musi pocitat s vacsim cislo ID a tym aj vacsim typom cisla a priestor ku zaplneniu. Vynasob to z milionmi zaznamami a este aj s prepojeniami a zistis ze sice pri malych DB ti to moze byt jedno, ale pri velkych databazach taketo drobnosti uz hraju belku rolu.

S coho plynie ze musi existovat nieco ako mat pod kontrolou aj auto_increment pri rollbacku.

Milan
PHP › PHP & MySQL ochrana databaze
1. 3. 2023   #391127

#17 Kit

Logiká veta: `Přeskočené ID nikoho nezajímá` je nesprávna. Logickou negaciou: `Preskocene IS zaujima aspon jedného` sa to dá vyvratit. Kedze to zaujima mna (aj keby to bolo len z akademického dovodu) tak som potvrdit vyrok logickej negacie , cize tvoj vyrok nie je spravny.

Ak vies a chces odpovedat kludne mi odpovedz. Lebo posledny komentar nebol ku nicomu konstruktivny.

Milan
PHP › PHP & MySQL ochrana databaze
1. 3. 2023   #391125

#15 Kit
Dakujem , poskusal som, akurat to ze funguje $db->insert_id; . Vyzera to zaujimavo a prekopem svoju class, spravi mi to usporu kodu.

Este ten rollback nevracia pocitadlo auto_increment ,

Milan
PHP › PHP & MySQL ochrana databaze
28. 2. 2023   #391123

#13 peter
1.) nebudem vsade pisat SQL v hlbke kodu na urovni mysqli.

2.) nikdo noehovoril ze to bude 10 SQL, to ze vy by ste to nehali tak nech po sebe neha bordel v pripade, nejakeho konfilktu, je vec vasa.

3.) neresim import database, ale import niecoho co nasledne spracovava, upravuje a pod.

4.) ja som sa pytal na nieco a jediny konstruktuvny tu bol GNA za to velke diki. Ked ked neviete poradit neradte, ked viete poradit poradit. Ked nehcete vies kontruktivne radsej nepiste. Vezmite si priklad z GNA.

Dakujem, o danej problematike neviete nic co riesim a nemam na plane vam vysvetlovat preco to riesim ako riesim.

Milan
PHP › PHP & MySQL ochrana databaze
28. 2. 2023   #391121

#10 Kit
Este som zabudol odpisat na sql injuction. S tohto examplu, ktory je v style hello world. Sa ani z daleka neda hovorit o SQL injuction. Ziadnym sposobom sa tam s tohto nevkladaju priamo do SQL parametre z napriklad $_GET , $_POST , useragent , cize externych zalezitosti.

Napriklad ked s $_GET by ti priamo doskladalo SQL mozeme sa bavit o uprave SQL konania, Ale ked na vstupe napriklad z _GET mas kontroly napriklad ze to moze byt len integer cize strikne sprecifikujes co to ma prepustit dalej uz potom sa branis ...

Milan
PHP › PHP & MySQL ochrana databaze
28. 2. 2023   #391120

#10 Kit
S tym ID ty to snad nemusim  vysvetlovat, Napriklad co myslis preco naprikald tato stranka ma napriklad:

http://programujte.com/forum/vlakno/194653-php-mysql-ochrana-databaze/#pridani_prispevku

cize ID = 194653 vlakna.

Ten kod je testovaci aby som otestoval funkcnost tam kde to bude treba. Ale nevracia to auto_incerement toho id. Nasledne podla ID moze lahko vyhladat, upravit, vymazat, riesit prepojenia medzi tabulkami a pod.

A co sa tyka autoinkrementu to je zakladna vec. mame dve riesenia:

1.) bez auto_incerement a manualne ID: precitanie posledneho, manualna inkrementacia a zapis. Problem je ze medzi nacitatanim a zapisom sa tam moze vsunut iny zaznam inym uzivatelom.

2.) auto_incerement: zapises pak zistis ID. a mozes robit navaznosti s inymi tabulkami.

Riesim jeden zlozitejsi import a a potrebujem osetrit, pripad keby to v procese vykonavania zlyhalo a meostali zaznamy v db.

Rad sa neham poucit. Ako by si to ty riesil ? Ukaz example. Dakujem

Milan
PHP › PHP & MySQL ochrana databaze
28. 2. 2023   #391118

#8 Kit
preco myslis ta trieda je mnou vytvorena aby som nemusel neustale pisat sql.

Milan
PHP › PHP & MySQL ochrana databaze
28. 2. 2023   #391116

Ono to vypada dobre.

$db->query("SET AUTOCOMMIT=0;");
$db->query("START TRANSACTION;");
$a = $db->write("test","val=25");   //true
$b = $db->write("test","val=3d2");  //false
if($a && $b){
  $db->query("COMMIT;");
}else{
  $db->query("ROLLBACK;");
}

Funguje to ale nevracia to AUTO_INCREMENT. Ako to fixxnut ?

Milan
PHP › PHP & MySQL ochrana databaze
28. 2. 2023   #391114

#4 gna
okay pojdem si to nastudovat a spravit par hokusov  pokusov na teste.

Este jedna otazka php umoznuje nieco take ako $$var (kde $var defunuje nazov premenej) alebo &@var kde mozem riesit prepajanie struktur napriklad:

$a = 10;
$b = 20;
$arr = array(&$a,&$b);
var_dump($arr);
// vypise ze to ma hodnoty 10 a 20.

$a = 100;
$b = 200;
var_dump($arr);
// vypise ze to ma hodnoty 100 a 200

da sa nieco taketo podobne spravit ? napriklad ze db by bola prepojena v systeme ze ked hocikedy ci v php, alebo externym programom alebo phpmyadmin a pod zmenim jednu z  buniek tak zmeny nastanu okamzite aj v ostatnych tabulkach ? cize ako keby roznie bunky z roznych tabuliek by smerovali ako by na jednu adresu ? Coz by znamenalo ze ked sa zmeni jedna bunka tak sa zmenia vsetky bunky ktore smeruju na tu adresu.

Milan
PHP › PHP & MySQL ochrana databaze
28. 2. 2023   #391112

#2 gna
Dobre zahrnuje to aj toto?

zapise zaznam, nasledne sa nacita id

php skript robi dalsie spracovanie v ktorom potrebuje to id a spusti dalsie zaznamy a u niektorych dalsie citania a dalsie spracovanie dat ktory usti k nejakej poslednej sekvencii sql prikaozov.

Cize inymi slovami neni mozne spravit kolekciu jedneho sql dotazu.

Milan
PHP › PHP & MySQL ochrana databaze
28. 2. 2023   #391110

Dobry den,

Co poznam mysqli tak ono to rovno vykona. A ak riesim nejaky import a pripadne v polovice mi to zlyha tak je problem s db. Napadli ma tieto riesenia:

1.) temp struktura tabuliek a nasledme move. Ale to nie je moc dobre lebo ked sa jedna tabulka odkazuje na druhu tak potom mi tam nebude sediet ID. Takze aj tak by som potreboval mnoho sql na opravu zoznamomov a ked to v nejakom procese zlyha napriklad vypadne elektrika tak je koniec a db je zasvinena

2.) zaloha danej struktury ale to tiez nie je moc dobre pretoze neriesi tieto veci a.) medzi zalohou a pripadnim spadnutim a naslednej obnove mohol nastat zapis pripadne iny import ktory kaskadovo poskodi dalsie a dalsie a pripadne ze boli uspesne tak po obnove tam nebudu.

3.) chcel by som nieco take ze by som importoval len do cache a napriklad cache obsadi nejake ID a bolo by rezervovane. A ked vsetko bude ok pak nejakym jednym SQL prikazom s toho spravit trvaly zaznam.

poradte mi dakujem.

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý