tiny ‘n’ smart
database layer

Odkazy: dibi | API reference

Oznámení

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

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?