tiny ‘n’ smart
database layer

Odkazy: dibi | API reference

Oznámení

Omlouváme se, provoz fóra byl ukončen

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,....)