Autor Zpráva
joe
Profil
Týká se to jak PHP tak MySQL, tak to dám sem, protože to řeším pomocí PHP.
Mám v tabulce dva sloupečky a pro každý z nich mám vytvořený unikátní index (2 indexy, ne 1 sloučený). A teď bych potřeboval, když vkládám do té tabulky nějaké data, zjistit, u kterého se to zaseklo, tedy přes který sloupec to tam nevložilo. Dostávám jen chybu #1582, o které jsem toho ani moc nenašel. Všude se píše jen o 1062, která je asi v případě, že bych se pokoušel vložit stejný primární klíč (?), ale ani jeden z těch sloupců primární není...

sloupec1 | sloupec2
---------------------------
neco | neco2


A teď když bych vkládal .... SET sloupec1 = 'neco', sloupec2 = '..' tak abych zjistil, že to je u sloupce1 a to samé naopak...
Joker
Profil
joe
Dostávám jen chybu #1582, o které jsem toho ani moc nenašel.
Nevím, kde hledáte, ale Google mi na dotaz mysql error 1582 vrátil, že jde o chybu "Duplicate entry '(hodnota)' for key '(klíč)'"

...čili se snažíte nacpat duplicitní hodnotu do sloupce s unikátním indexem, což podle následujícího popisu v příspěvku taky děláte.
joe
Profil
Joker
Ale ano, vím že jde o chybu Duplicate entry... to mi píše i phpMyAdmin.
Tyto data jdou od uživatele a chtěl bych ho informovat v případě, že zadá už nějakou existující hodnotu - buď do sloupce1 nebo do sloupce2, tak abych ho upozornil, že třeba hodnota1 už existuje a nebo hodnota2 už existuje, případně obě už existují.
Tak bych chtěl tedy nějak rozlišit, pro jaký sloupec to je. Nebo mám třeba v chybě hledat řetězec indexu?

A proč se mi vlastně objevuje chyba 1582, když se všude píše a počítá jen s chybou 1062 jako duplikování...

Díky:)
joe
Profil
Například tady
http://php.vrana.cz/vyuziti-unikatnich-klicu-v-databazi.php
je počítáno s chybou 1062, jakto že mně se zobrazuje chyba 1582? :)
Joker
Profil
joe
Co jsem četl, tak před MySQL 5.1 se vrací chyba 1062 (ER_DUP_ENTRY) a od MySQL 5.1 dál se vrací chyba 1582 (ER_DUP_ENTRY_WITH_KEY_NAME).
Každopádně by neměl být velký problém testovat obě dvě.
Joker
Profil
Aha, aktualizace:
Co jsem četl, tak tahle nekompatibilita vznikla ve verzi 5.1.15 a byla zase odstraněna ve verzi 5.1.20, která by už zase měla používat chybu 1062.

Nic to nemění na tom, že bych doporučil testovat obě chyby.

edit: opravil jsem verzi, kde byla ta změna odstraněna, není to 5.1.19, ale 5.1.20. Ještě přidám další informace...
Mezi změnami ve verzi 5.1.15 je i toto (viz http://dev.mysql.com/doc/refman/5.1/en/news-5-1-15.html )
Important Change: Previously, duplicate-key errors were indicated by the ER_DUP_ENTRY error code (1062). This code is no longer used. Instead, the server returns ER_DUP_ENTRY_WITH_KEY_NAME (1582), and the error message indicates the name of the index for which the duplicate occurred. Applications that test for duplicate keys should look for both error codes if they need to be compatible with current and older servers.

A ve verzi 5.1.20 (viz http://dev.mysql.com/doc/refman/5.1/en/news-5-1-20.html )
In MySQL 5.1.15, a new error code ER_DUP_ENTRY_WITH_KEY_NAME (1582) was introduced to replace ER_DUP_ENTRY (1062) so that the key name could be provided instead of the key number. This was unnecessary, so ER_DUP_ENTRY is used again and the key name is printed. The incompatibility introduced in 5.1.15 no longer applies.
joe
Profil
Joker
Aha, to je zajímavé, k tomu jsem se nikde nedopátral. No ale otázkou tedy je, když se mi bude vracet chyba ER_DUP_ENTRY, bez názvu klíče, jak mám pak poznat, jestli se snaží někdo duplikovat první nebo druhý unikátní sloupec...
Joker
Profil
joe
Je to takhle:
Před MySQL 5.1.15 se vrací chyba 1062 (ER_DUP_ENTRY) a v ní číselné označení klíče, například:
Duplicate entry 'hodnota' for key '1'
MySQL 5.1.15 - 5.1.19 vrací chybu 1582 (ER_DUP_ENTRY_WITH_KEY_NAME) s názvem klíče, například:
Duplicate entry 'hodnota' for key 'klic'
MySQL 5.1.20 vrací zase chybu 1062, ale už s názvem klíče místo čísla. Tedy stejnou hlášku jako ta 1582, akorát už to zase je chyba 1062.

Jelikož u verze 5.1.20 je tahle oprava v sekci "Bugs fixed", asi bych to bral, jako že "správně" je 1062 a 1582 je "chyba" verzí 5.1.15 - 5.1.19.
joe
Profil
Díky moc, tohle mi opravdu moc pomohlo ;-)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: