Oznámení
Zapis INSERT ci UPDATE a pole
před 9 lety
- Kcko
- Člen | 292
Ahoj,
procetl jsem nekolik uvodnich clanku o DIBI a neni mi jasne jak mohu v zapisech, kde se pouziji pole, dosadit modifikatory, abych upresnil datovy typ a osetreni.
Napr. zde (rad bych nastavil ze name ma byt string = %s a active ma byt = %i
dibi::query('INSERT INTO `people`', array(
'name' => $name,
'active' => 1
));
Tyka se to i update klauzule. Prohledl jsem priklady, ale odpoved jsem nenasel. Diky za vysvetleni.
před 9 lety
- matata
- Backer | 672
ahoj, je to tam pod nadpisem Složitější výrazy v polích a tvuj priklad by vypadal:
<?php
dibi::query('INSERT INTO `people`', array(
'name%s' => $name,
'active%i' => 1
));
?>
před 9 lety
- Kcko
- Člen | 292
Aha, vubec jsem si nevsiml, takovyto styl zapisu by mne urcite nenapadl.
Dekuji.
Editoval Kcko (12. 3. 2010 13:03)
před 9 lety
- David Grudl
- Nette Core | 6806
Není lepší
dibi::query('INSERT INTO `people`', array(
'name' => (string) $name,
'active' => 1
));
před 9 lety
- Kcko
- Člen | 292
David Grudl napsal(a):
Není lepší
dibi::query('INSERT INTO `people`', array( 'name' => (string) $name, 'active' => 1 ));
Neni, DIBI nepouzivam jen kvuli urychleni prace (metody fetchAll, fetchPairs, fetchSingle ..atd), ale hlavne kvuli modifikatorum, ktere za mne vse osetri. Timto bych tu vyhodu ztratil, sam si promenne pretypovavat nechci.
před 9 lety
- Ondřej Mirtes
- Člen | 1539
V případě zápisu pomocí pole a neuvedení modifikátorů funguje v dibi autodetekce, takže vše máš ošetřené jako předtím :) SQL injection tu nehrozí nikdy, jen se může stát, že místo očekávaného integeru ti do URL přijde string a v databázi se podle toho nic nenajde.
Ale vždycky můžeš využít ty modifikátory těsně za názvem sloupce, jak psal matata.
před 9 lety
- Kcko
- Člen | 292
Ondřej Mirtes napsal(a):
V případě zápisu pomocí pole a neuvedení modifikátorů funguje v dibi autodetekce, takže vše máš ošetřené jako předtím :) SQL injection tu nehrozí nikdy, jen se může stát, že místo očekávaného integeru ti do URL přijde string a v databázi se podle toho nic nenajde.
Ale vždycky můžeš využít ty modifikátory těsně za názvem sloupce, jak psal matata.
Jsem rad, ze jsem dostal radu uz v uvodnim prispevku. O SQL injekci tolik nejde (samozrejme ze jde), ale pokud odeslu data rovnou z formulare do DB tak i kdyby mel user vyplnit treba aktualni vek narozeni a skutecne tam napise cislo, tak je to stejne string a do DB by se dostala 0. Autodetekce je vhodna mimo formulare.
Stejne diky za tuto informaci :) nekdy mozna vyuziji.
Diky vsem.
před 9 lety
- Ondřej Mirtes
- Člen | 1539
Když string s číselným obsahem v PHP přetypuješ na číslo, tak dostaneš to číslo :)
před 9 lety
- Kcko
- Člen | 292
Ondřej Mirtes napsal(a):
Když string s číselným obsahem v PHP přetypuješ na číslo, tak dostaneš to číslo :)
No prave :) ale to ja nechci, chci aby to za me resila DIBI :), takze pokud si mam vybrat jestli si promennou pretypuji sam nebo si dopisi modifikator, rozhodne volim za numero due.
Procetl jsem si vsechny clanky, napriklad fluent prikazy jsou pro me zbytecne, nez bych napsal svoje zanorene SQL dotazy, ktere opravdu nejsou jednoduche a kratke pomoci FLUENT zapisu tak je 10× rychleji napisu ruco.
Akorat mi vrta hlavou jeste jedna vec
Napisu to „zcela normalne bez DIBI“ a velmi bych ocenil, kdyby mi to nekdo prepsal do DIBI zapisu
$q = "SELECT t1.* ";
if ($podminka === true)
$q .= " t2.nejaky_sloupec";
$q .= "FROM tabulka1 as t1";
if ($podminka === true)
$q .= ", tabulka2 as t2";
$q.= " WHERE 1";
if ($podminka2)
$q .= "t1.vek = 20";
if ($podminka3)
$q.= " OR t2.neco = 'blabla'";
if ($podminka4)
$q .= "AND (t1.abc = 1 OR t2.= 'cdf')";
Rad bych to videl zapsane pomoci modifikatoru (tj. ne autodetekce dat. typu a take pomoci poli, viz clanek https://phpfashion.com/…em-dibitydne a pomoci nejakeho prijemneho skladani)
Uz jsem velmi blizko k tomu, abych kolegy ve firme premluvil k vystavbe noveho frameworku s pouziti DIBI :)
Dekuji moc!
před 9 lety
- Ondřej Mirtes
- Člen | 1539
No ale dibi ti to přetypuje (automaticky) stejně, jako by sis to přetypoval ty, ne?