Autor | Zpráva | ||
---|---|---|---|
JardaB Profil |
#1 · Zasláno: 5. 9. 2018, 09:19:38
Zdravím, u jistého hostingu jsem narazil na následující problém, pravděpodobně při změně verze MySQL
Tohle mi fungovalo ještě včera $values="('$klient','$k_mail','$jmeno','$hash','$datum','$ip','9','3000','')"; Dnes pokud neuvedu i hodnotu poslední položky, tak se neuloží, tedy: $values="('$klient','$k_mail','$jmeno','$hash','$datum','$ip','9','3000','0')"; Jde o položku typu integer. Dříve když nebylo uvedeno, tak se použila výchozí hodnota dle zadání struktury tabulky. Vysvětlí mi prosím někdo tuto problematiku? |
||
Radek9 Profil |
#2 · Zasláno: 5. 9. 2018, 09:27:02
JardaB:
1) Proč zapisuješ čísla do apostrofů? 2) Pro tyhle účely by se mělo používat klíčové slovo DEFAULT . Tvůj způsob (prázdné apostrofy) je dost pofidérní.
3) Řešíš SQL injection? |
||
JardaB Profil |
#3 · Zasláno: 5. 9. 2018, 10:00:05
Mno někdy se mi na téhle diskusi líbí to, že místo odpovědi na kterou se ptám dostanu otázky na mou otázku, nicméně to beru :)
Neřeším tu nyní zápis a ani SQL injection, ale důvod, proč se to tak stalo. Jde navíc o kod, který spravuji klientovi a ten jsem já nevytvářel. Radek9: „1) Proč zapisuješ čísla do apostrofů?“ když ručně vložím do dtb data tak to samo generuje následující: VALUES ('10', '20', '', '', '', '', '', '', '') - proč to tedy tak generuje, když je to chybně? |
||
TomášK Profil |
#4 · Zasláno: 5. 9. 2018, 10:15:58
Viz nastavení strict mode: dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sql-mode-strict
proč to tedy tak generuje, když je to chybně? Protože je chybný generátor, ať už je to cokoliv. |
||
Keeehi Profil |
#5 · Zasláno: 5. 9. 2018, 10:17:44
JardaB:
„proč to tedy tak generuje, když je to chybně?“ Tak možnosti jsou dvě. Buď ty sloupce jsou v tabulce opravdu textového a ne číselného typu a pak by si pravděpodobně zasloužily opravu. Nebo jsou sloupce správně ale používáš pro vkládání dat nějaký program který si práci ulehčuje a nezjišťuje si datový typ sloupce, protože předpokládá, že si databáze případnou konverzi prostě udělá. Podle dokumentace jsou v MySQL dvě možnosti, jak vložit defaultní hodnotu do databáze. Buď tu hodnotu vynecháš (v takovém případě ale musíš vypsat do dotazu sloupce) nebo jako hodnotu použiješ klíčové slovo DEFAULT. |
||
JardaB Profil |
#6 · Zasláno: 5. 9. 2018, 10:25:19
Keeehi:
„Podle dokumentace jsou v MySQL dvě možnosti, jak vložit defaultní hodnotu do databáze. Buď tu hodnotu vynecháš (v takovém případě ale musíš vypsat do dotazu sloupce) nebo jako hodnotu použiješ klíčové slovo DEFAULT.“ Ano tohle mi došlo, nicméně pár dnů zpět to fungovalo i když se hodnota nevynechala a nebylo uvedeno DEFAULT.. Chápu že to je špatně, ale klientovi to šlapalo 5 let.. Hosting tvrdí, že neměnili žádné nastavení ani verzi „Tak možnosti jsou dvě. Buď ty sloupce jsou v tabulce opravdu textového a ne číselného typu a pak by si pravděpodobně zasloužily opravu. Nebo jsou sloupce správně ale používáš pro vkládání dat nějaký program který si práci ulehčuje a nezjišťuje si datový typ sloupce, protože předpokládá, že si databáze případnou konverzi prostě udělá“ generuje to přímo phpmyadmin a datové typy těch sloupců jsou opravdu integer Problém chápu a vyřeším jej, jen mne zajímaly věci kolem... |
||
Radek9 Profil |
#7 · Zasláno: 5. 9. 2018, 10:45:44
JardaB:
„Mno někdy se mi na téhle diskusi líbí to, že místo odpovědi na kterou se ptám dostanu otázky na mou otázku“ Já ti odpověděl, jestli sis nevšiml. (Viz bod 2.) Ty doplňující otázky sem nepíšu proto, abych si rejpnul, ale proto, že jsou ve většině případů vhodné. Kór tady, když opravdu neexistuje důvod zapisovat čísla do apostrofů. Nebo obecně vkládat hodnoty do SQL tímto způsobem. Podívej se na prepared statements, ulehčíš si život. |
||
Kajman Profil |
JardaB:
„generuje to přímo phpmyadmin a datové typy těch sloupců jsou opravdu integer“ Tak jim to nahlašte, ať si to opraví. Např. adminer nezadané hodnoty v insertu vynechá, ale čísla také dává do apostrofů. Zkontroloval jste si tedy, v jakém sql módu je databáze, zda je to tím? Lze ji nastavovat i pro session, nemusí to být změnou nastavení serveru. Obecně je u mysql lepší mít při vývoji ten sql mód nastavený přísnější. Ale i u povolnějšího by předchozí insert měl vracet varování. Edit: ještě se můžete podívat, kdy byla naposledy mysql restartována, jestli Vám hosting nelže show status like 'uptime%' |
||
Časová prodleva: 5 let
|
0