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')
nebo
INSERT INTO table(klic, column1, column2) VALUES(null, 'value1', 'value2')
V obou případech se vloží další následující hodnota auto incrementu.
Joker
Profil
xlifer:
Nechcete třeba INSERT … ON DUPLICATE KEY UPDATE …?
Kajman
Profil
xlifer:
Hodnoty bývají uvedené v textu varování, třeba by to stačilo.
xlifer
Profil
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
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
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
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
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

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: