Odkazy: dibi | API reference

Forum: [česky] [english]

dibi fórum

tiny ‘n’ smart
database layer

Nejste přihlášen(a)

#1 před rokem

Kcko
Člen
Registrovaný: 22. 10. 2009
Příspěvky: 12

Zapis INSERT ci UPDATE a pole

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.

 

#2 před rokem

matata
dibi guru
Registrovaný: 16. 3. 2009
Příspěvky: 276

Re: Zapis INSERT ci UPDATE a pole

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
));
?>

 

#3 před rokem

Kcko
Člen
Registrovaný: 22. 10. 2009
Příspěvky: 12

Re: Zapis INSERT ci UPDATE a pole

Aha, vubec jsem si nevsiml, takovyto styl zapisu by mne urcite nenapadl.
Dekuji.

Editoval Kcko (12. 3. 2010 13:03)

 

#4 před rokem

David Grudl
Administrator
Registrovaný: 8. 2. 2005
Příspěvky: 5548

Re: Zapis INSERT ci UPDATE a pole

Není lepší

dibi::query('INSERT INTO `people`', array(
    'name' => (string) $name,
    'active' => 1
));

 

#5 před rokem

Kcko
Člen
Registrovaný: 22. 10. 2009
Příspěvky: 12

Re: Zapis INSERT ci UPDATE a pole

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.

 

#6 před rokem

Ondřej Mirtes
Moderator
Registrovaný: 8. 1. 2009
Příspěvky: 1621

Re: Zapis INSERT ci UPDATE a pole

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.

 

#7 před rokem

Kcko
Člen
Registrovaný: 22. 10. 2009
Příspěvky: 12

Re: Zapis INSERT ci UPDATE a pole

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.

 

#8 před rokem

Ondřej Mirtes
Moderator
Registrovaný: 8. 1. 2009
Příspěvky: 1621

Re: Zapis INSERT ci UPDATE a pole

Když string s číselným obsahem v PHP přetypuješ na číslo, tak dostaneš to číslo :)

 

#9 před rokem

Kcko
Člen
Registrovaný: 22. 10. 2009
Příspěvky: 12

Re: Zapis INSERT ci UPDATE a pole

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 http://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!

 

#10 před rokem

Ondřej Mirtes
Moderator
Registrovaný: 8. 1. 2009
Příspěvky: 1621

Re: Zapis INSERT ci UPDATE a pole

No ale dibi ti to přetypuje (automaticky) stejně, jako by sis to přetypoval ty, ne?

 

Zápatí