tiny ‘n’ smart
database layer

Odkazy: dibi | API reference

Oznámení

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

SELECT z funkcie s definovaním dátových typov parametrov v PostgreSQL

před 9 lety

slapo
Člen | 23

Zdravím,

dá sa nejako dibi naznačiť, aby brala pretypovanie v PostgreSQL bez toho, aby sa ho pokúšala preložiť?
Pokúšal som sa to nájsť tu na fóre aj v dokumentácii, ale nenašiel som nič, čo by sa týkalo podobného problému.

Príklad query:

SELECT
    id_product,
    name,
    description,
    price
FROM
    fx_get_product_list(%f, %s::character varying, %i, %s::character varying, %i, %s::character varying)
;

Ak sa pokúsim query vyššie použiť, vznikne výnimka:

Missing substitution for '' expression.

Robí mi to vo verzii 1.2 aj dnes stiahnutej 1.3-dev.

Aspoň tipy by boli vítané.

Ďakujem.

Editoval slapo (21. 6. 2010 16:19)

před 9 lety

PetrP
Člen | 587

Problém je s dvojtečkou. Bere se jako substituce.

Je to už hlášený problém. Zkusil jsem přidat možnost escapování pomocí \: Uvidíme co na to david až se vrátí.

Prozatím to můžeš rychle vyřešit tak že si přidáš prázdnou substituci která ti vrátí '':

dibi::addSubst('','');

nebo odstranením vyhazování chyb při neexistující substituci:

dibi::setSubstFallback(function ($expr) {
    return $expr;
});

nebo volat čisté sql (což je možná pro tebe nejlepší řešení):

dibi::nativeQuery('...');

Editoval PetrP (23. 6. 2010 14:49)

před 9 lety

slapo
Člen | 23

Ďakujem, začal som používať metódu nativeQuery a vlastnú na escapovanie údajov.
Zdá sa, že zatiaľ to lepšie s dibi nepôjde.

před 9 lety

PetrP
Člen | 587

Escapovat můžeš takto:

dibi::getConnection()->getDriver()->escape('foo', dibi::IDENTIFIER);
dibi::getConnection()->getDriver()->escape('bar', dibi::TEXT);
// atd

před 9 lety

slapo
Člen | 23

PetrP napsal(a):

Escapovat můžeš takto:

dibi::getConnection()->getDriver()->escape('foo', dibi::IDENTIFIER);
dibi::getConnection()->getDriver()->escape('bar', dibi::TEXT);
// atd

Ďakujem :)