Jak správně předat hodnotu do SQL funkce?

Eda
Backer | 220
+
0
-

Zdarec.

Netušíte někdo, jak správně pomocí NDB Exploreru zapsat tohle?

...
WHERE (SUBSTRING(TRIM(TRAILING '?' FROM `outOfRegister`), -4) <= '1996')
...

Jde o to, že když to zkusím takto:

$selection->where(
    '(SUBSTRING(TRIM(TRAILING ? FROM outOfRegister), -4) <= ?)',
    new SqlLiteral('?'),
    '1996'
);

Nebo třeba takto:

$selection->where(
    '(SUBSTRING(TRIM(TRAILING ? FROM outOfRegister), -4) <= ?)',
    '?',
    '1996'
);

…nezachová se to tak, jak bych očekával. První případ skončí chybou There are more placeholders than passed parameters. Druhý pak vygeneruje dotaz špatně a spadne to při jeho exekuci – dá se tam přebytečné rovnítko a vypadá to pak takto:

((SUBSTRING(TRIM(TRAILING = '?' FROM `outOfRegister`), -4) <= '1996'))

Díky za případné tipy a tríčky, už úplně nestačím sledovat všechny aktuální postupy, tak mi možná něco uteklo :-)

Editoval Eda (16. 11. 2021 0:24)

Kamil Valenta
Člen | 820
+
0
-
$selection->where(
    '(SUBSTRING(TRIM(TRAILING ? FROM outOfRegister), -4) <= ?)',
    new SqlLiteral('\'?\''),
    '1996'
);
Eda
Backer | 220
+
0
-

@KamilValenta Díky, ale ani to bohužel nefunguje.

Nicméně ještě jsem dál experimentoval a došel jsem k tomuto a to, zdá se, funguje tak, jak potřebuju. Takže díky za inspiraci.

$selection->where(
    '(SUBSTRING(TRIM(TRAILING ? FROM outOfRegister), -4) <= ?)',
    new SqlLiteral('?', ['?']),
    '1996'
);

Editoval Eda (16. 11. 2021 9:54)

Kamil Valenta
Člen | 820
+
0
-

To je zvláštní, já jsem to před odesláním otestoval a fungovalo to. Ale nemám nejnovější verzi, tak možná nějaká změna…