Oznámení
modifikator + pole (INSERT)
před 11 lety
- rokerkony
- Člen | 123
Ahoj .. mam problem.. teda spis nevim jak na to :) s dibi zacinam a je super :)
$pole = array(
"menu_id" => "",
"menu_parentid" => "0",
"menu_title" => "Bla Bla",
"menu_link" => "bla-bla",
"menu_author" => "autor",
"menu_flag" => "1"
);
dibi::query("INSERT INTO menu SET %a",$pole);
coz funguje dle ocekavani… ale co kdyz chci s modifikatorem %a vkladat vicekrat
dibi::query("INSERT INTO menu SET %a",$pole,$pole2,$pole3...);
tohle mi uz neprojde, zkousel jsem teda i
dibi::query("INSERT INTO menu SET %a",$pole,"%a",$pole2,"%a",$pole3...);
ale take bez uspechu…
Dekuji za vyreseni :-) (doufam ze to jde a ze je problem jenom mezi mnou zidli a PC)
před 11 lety
- PetrP
- Člen | 587
Zaleží co od toho vlastně čekáš. Hlavně bych nepoužíval INSERT INTO SET ale:
dibi::query("INSERT INTO menu %v",$pole);
// nebo rovnou vynechat %v protože dibi ho doplní
dibi::query("INSERT INTO menu",$pole);
// samotného mě překvapilo že SET funguje
Jestli chceš přidat více záznamů tak bych zkusil:
dibi::query("INSERT INTO menu %v",$pole,', %l',$pole2,', %l',$pole3);
// nebo zase automaticky od dibi doplnit modifikatory
dibi::query("INSERT INTO menu",$pole,$pole2,$pole3);
// ta autodetekce je samozřejmě tisíckrát komfortnější, ale uvádím i s modifikátorama pro pochopení
Taky raději uvádím možnost že máš v jednotlivých polích roztroušená data pro jeden záznam:
dibi::query("INSERT INTO menu", array_merge($pole,$pole2,$pole3) );
Editoval PetrP (29. 7. 2008 23:39)
před 11 lety
- rokerkony
- Člen | 123
me slo ale prave o pouziti insertu s pouzitim SET misto VALUES()
ma to jednu vyhodu, a to tu ze pokud mate v databazi nastaveny napr. sloupec
flag vychozi 1, tak ho pri kazdem posilani odkazu nemusite zadavat.. to same
pokud mate id jako auto_increment apod…
a dibi podle dokumentace (%a – assoc – [key]=val, [key2]=„val2“, …) podporuje moznost INSERTU pomoci SET a je to pravda :) ovsem jsem nezjistil jak je to pro vice vlozeni najednou :-(
před 11 lety
- PetrP
- Člen | 587
Nerozumím. Když chci něco nastavit na default tak to prostě nedám do pole, a je jedno jestli to je %v nebo %a. Chování které popisuješ bys asi docílil při nastavení %l; kde nejsou klíče, ale jenom hodnoty v pořadí jako v tabulce (nepamatuju že bych to někdy použil takže jen předpokládám).
Jinak domnívám se že už z principu při SET nelze zadat více záznamů. Respektive jak by podle tebe měl vypadat výslednej sql?
Taky by mělo jít jako hodnotu nastavit DEFAULT (u všech variant). Pořád ale nevidím žádnou výhodu v používání SET, spíš bych se bál že to nebudou umět jiné db.
před 11 lety
- rokerkony
- Člen | 123
no defaultne je u INSERTU nastavene %v a ja jsem potreboval %a … ale mate
pravdu v tom ze s pouzitim SET asi nepujde sestavit dotaz pro vice vlozeni
(take si to neumim predstavit jak by to vypadalo) neuvedomil jsem si to …
omlouvam se… :)
takze pokud to chci zrekapitulovat tak insertnout se da i vice poli najednout
ale jen s modifikatorem %v(ktery je defaultne) ale s %a jen jednou. :) presto
dekuji :)
před 11 lety
- phx
- Člen | 652
Ohledne default hodnot staci u inzertu vyjmenovat sloupecky jake vkladas!
INSERT INTO table_name (column1, column2,...) VALUES (value1, value2,....)