Oznámení
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 :)