Kontaktovat podporu

Odpovíme e-mailem, obvykle do dvou dnů.

Google reCAPTCHA kontroluje toto odeslání kvůli ochraně před zneužitím; data se přitom předávají společnosti Google. Skript se načte až při otevření tohoto formuláře.

← Všechny články

Adresa stránky delší než její sloupec

9. srpna 2026 se nevykreslilo dvacet obrázků počítadla. Nevykreslily se špatně ani pomalu — návštěvník nedostal vůbec nic tam, kde mělo být počítadlo.

Příčinou byla adresa stránky delší než 255 znaků. Teď se zkracuje už při zápisu a obrázek počítadla už nezávisí na délce adresy, kterou dostane.

Řetězec

Sloupec, který ukládá, na kterou stránku návštěva dorazila, je varchar(255). Adresa přišla delší. Vložení selhalo s SQLSTATE 22001, data příliš dlouhá pro sloupec, což v tomto kódu vyvolalo výjimku.

A zápis statistik proběhne před vykreslením obrázku. Výjimka tedy nepřipravila jen o jeden řádek statistik. Přerušila požadavek, a ten požadavek byl právě ten, který vytváří obrázek počítadla. Stránka s dlouhou adresou rozbila své vlastní počítadlo, potichu, pro každého návštěvníka.

sloupecvarchar(255)vložení selžeSQLSTATE 22001výjimkapřeruší požadaveknávštěvník nedostane obrázek

Dlouhé adresy nejsou nic exotického. Galerie s vnořenými cestami, e-shop s tuctem sledovacích parametrů, které přidala reklamní platforma, stránka s výsledky hledání — kterákoli z nich překročí 255 znaků bez námahy.

Oprava a oprava, která zvolena nebyla

Adresa se teď před vložením zkrátí na šířku sloupce. Z velmi dlouhé URL se v seznamu stránek ztratí dvacet znaků; nic jiného se nemění.

Alternativou bylo sloupec rozšířit. To bylo zamítnuto: neexistuje šířka, kterou nelze překročit, a volba většího čísla jen odsouvá stejné selhání dál, kde bude těžší ho poznat, až přijde. Selhání musí přestat být fatální, ne jen vzácnější.

Obalit vložení do try/catch by také odstranilo viditelný příznak, a bylo by to horší: počítadlo by se vykreslilo, řádek by potichu zmizel a v seznamu stránek by navždy chyběly právě stránky s nejsložitějšími adresami, bez jediné zmínky v jakémkoli protokolu.

Dvě věci, které si stojí za to odnést

Cizí vstup se má zkrátit na šířku sloupce, ne doufat, že se vejde. Cokoli, co přichází zvenčí — adresa, odkazující stránka, user agent, titulek — je tak dlouhé, jak rozhodl někdo jiný, a databáze na to má názor, který vyjadřuje odmítnutím.

Vědět, co ještě visí na tom, co může selhat. Byla to chyba statistik ve službě pro statistiky a viditelnou škodou byl chybějící obrázek. Zápis a vykreslení sdílely požadavek; nic v kódu neříkalo, že jsou provázané, a nic nevarovalo, že neúspěšné vložení vezme obrázek s sebou.

Dvacet rozbitých obrázků za den je málo. Našlo se to při čtení protokolů kvůli něčemu úplně jinému, což je obvyklý způsob, jak se takové věci najdou, a důvod, proč je číst dál.

Reklama