Portál AbcLinuxu, 27. dubna 2024 05:40


Dotaz: Mysql datetime - kontrolovat vstup při porovnánání ?

13.12.2010 17:42 sss
Mysql datetime - kontrolovat vstup při porovnánání ?
Přečteno: 623×
Odpovědět | Admin
ahoj. Mám napsanou jednoduchou aplikaci kde uživatel zadá datum a čas a mysql vrátí data větší než datum. Nijak neomezuju vstupní řetězec, protože jsem zjistil, že mysql je jedno jestli je vstup 2010-10-10 12:12:12 nebo třeba "dasd234dc". Dotaz vždy proběhne. Takové chování se mi líbí, ovšem neexistuje taková kombinace vstupních znaků které by způsobily selhání dotazu při porovávání se sloupcem datetime?
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Jendа avatar 13.12.2010 18:15 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Mysql datetime - kontrolovat vstup při porovnánání ?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Když uživatel pošle jako vstup "; DROP TABLE `tabulka`; --, jak bude vypadat ten dotaz?
Já to s tou denacifikací Slovenska myslel vážně.
13.12.2010 18:48 sss
Rozbalit Rozbalit vše Re: Mysql datetime - kontrolovat vstup při porovnánání ?
Automaticky se to odescapuje, používám pdo prepared statements. Mě jde spíš o to, že za určitých okolností je výhodné mít možnost provádět dotazy typu "... where datum < 'nahodnyretezec'". Jestli takový dotaz dává smysl nebo ne to je v tu chvíli celkem jedno (stejně jako porovnánání řetezců s čísly apod.) - toto všechno mysql řeší alespoň v případech které jsem zkoušel. Proto se ptám jestli existuje nějaký případ kdy ten dotaz může selhat.
rADOn avatar 14.12.2010 12:59 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: Mysql datetime - kontrolovat vstup při porovnánání ?
Jestli si dobre vzpominam tak pri nejakym nastaveni serveru muze selhat neplatny datum, napr. 30. unor. Ale co to presne bylo uz ti nepovim, hledej v rtfm k datetime.
"2^24 comments ought to be enough for anyone" -- CmdrTaco
rADOn avatar 14.12.2010 13:02 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: Mysql datetime - kontrolovat vstup při porovnánání ?
"2^24 comments ought to be enough for anyone" -- CmdrTaco
14.12.2010 15:10 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Mysql datetime - kontrolovat vstup při porovnánání ?
No buď Vám to selže na každý neplatný datum nebo to vygeneruje (obvykle) jen warning a datum je nastaven na nulu respektive na 0000-00-00 - dle nastavení. Takže máte možnost si získat warningy (pomocí 'SHOW WARNINGS') a případně na to upozornit, pokud to nepovažujete z nějakého důvodu za chybu.
Jestli se nepletu ty warningy to generuje od nějaké verze 5.0.x - nevím přesně.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
14.12.2010 16:46 kuka
Rozbalit Rozbalit vše Re: Mysql datetime - kontrolovat vstup při porovnánání ?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Mozna trochu OT, ale to, ze dotaz "vzdy probehne" nemusi byt uplne zadouci z hlediska vykonu. Prece jen pokud vim rovnou, ze to nic nevybere, nemusim napr. databazi vubec volat, natoz aby neco vyhodnocovala.
17.12.2010 17:08 sss
Rozbalit Rozbalit vše Re: Mysql datetime - kontrolovat vstup při porovnánání ?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tak jsem koukal do konfigu zjišťoval jsem zda nemám zaplý nějaký sql_mode a ne a stejně to bere všechny datumy dokonce i když nastavím STRICT_ALL_TABLES tak to nevyhodí ani výjimku. Mám mysql 5.1. Je tohle chování v pořádku? Celkově bych totiž potřeboval zaručit, aby šlo všechno porovnávat se vším. Třeba INT s řetězcem, VARCHAR s číslem, BIT s čímkoliv apod. Ono to teda teď funguje, ale zase nevím jestli to bude fungovat u všeho a podle manuálu by to bez allow_invalid_dates nemělo fungovat na špatných datumech, ale funguje, tak já nevím. Celkově jde o to, že já mám nějakou tabulku u které předem neznám datové typy sloupců a uživatel může zadávat podmínky typu: kde sloupec1 < "libovolný uživatelem zadatelný řetězec". Kdybych měl porovnávat co uživatel smí zadat. upravovat formuláře podle datových typů v tabulce ... tak by to bylo dost kódu navíc, proto bych to chtěl vyřešit přímo v mysql.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.