Autor | Zpráva | ||
---|---|---|---|
xlifer Profil |
Mám tabulku:
CREATE TABLE nejaka_tabulka ( klic int(11) auto_increment, pole1 varchar(64), pole2 char(8), pole3 tinyint(2), PRIMARY KEY (klic), UNIQUE KEY (pole3) ); Když INSERT nebo UPDATE záznamu zahlásí chybu 1062, tak lze nějakým způsobem zjistit v PHP hodnotu klíče (PRIMARY_KEY nebo UNIQUE_KEY) ? Nebo musím jít klasicky přes SELECT ... WHERE, což chci právě nějak elegantně obejít, pokud by "1062" někam dostupně uložila hodnotu klíču. |
||
Zechy Profil |
V insertu vynech pole pro klíč, v případě auto_increment se klíč vloží sám. Tudíž dotaz bys měl asi ve stylu:
INSERT INTO table(column1, column2) VALUES('value1', 'value2') INSERT INTO table(klic, column1, column2) VALUES(null, 'value1', 'value2') |
||
Joker Profil |
#3 · Zasláno: 7. 5. 2014, 07:14:21
xlifer:
Nechcete třeba INSERT … ON DUPLICATE KEY UPDATE … ?
|
||
Kajman Profil |
#4 · Zasláno: 7. 5. 2014, 08:42:34
xlifer:
Hodnoty bývají uvedené v textu varování, třeba by to stačilo. |
||
xlifer Profil |
#5 · Zasláno: 7. 5. 2014, 16:54:43 · Upravil/a: xlifer
Zechy:
Tomu, rozumím, ale něřeším problém jak tomu předcházet, používám tento zůsob jako ověření již existujícího záznamu v db, např. když máte db uživatelů s nějakým emailem, apod. Je to praktické. Kajman: Ano, vím, už jsem nad tím přemýšlel, ale je tam možná ritiko, že když se změní verze mysql atd. tak se může změnit i text hlášení a následný parser toho klíče z textu, může chybovat... Joker: „Nechcete třeba INSERT … ON DUPLICATE KEY UPDATE …?“ Tohle asi neznám, to je co za možnost? |
||
pcmanik Profil |
xlifer:
„Tohle asi neznám, to je co za možnost? Myslím, že dostať sa do dokumentácie je rýchlejšie ako položiť otázku... Naviac anglický nazov je samopopisujúci. |
||
xlifer Profil |
#7 · Zasláno: 7. 5. 2014, 19:29:20
pcmanik:
Pravda, ale myslel jsem, že tím lze řešit nějak to načtení klíče což tady řeším. Tohle je pouze způsob jak to obejít, což nepotřebuji. Ale díky, aspoň znám zase něco nového. |
||
Kajman Profil |
#8 · Zasláno: 7. 5. 2014, 19:41:08
xlifer:
Při chybě se můžete podívat na unikátní klíče v tabulce a zkontrolovat na základě vkládaných dat, které byly porušeny. |
||
xlifer Profil |
#9 · Zasláno: 9. 5. 2014, 15:44:14
Kajman:
A můžu se zeptat jak to konkrétně myslíte? Jako pomocí nějaké speciální funkce nebo klasicky přes SELECT * WHERE ? |
||
Kajman Profil |
#10 · Zasláno: 9. 5. 2014, 17:22:27
Pokud neznáte unikátní klíče na té tabulce, tak se dají zjistit z
http://dev.mysql.com/doc/refman/5.5/en/key-column-usage-table.html Pak stačí pro každý unikátní klíč sestavit onen klasický dotaz select count(*) from tabulka where #sloupce = vkládaná hodnota |
||
Časová prodleva: 10 let
|
0