DIBI syntaxe v dotazu query()
- martin20a
- Člen | 8
Zdravím,
prosil bych o radu, s nette víceméně začínám a dříve jsem využíval DIBI, aktuálně potřebuji udělat složitější dotaz na které nestačí konstrukce, takže si ho volám normálě přes ->query(), dotaz chci mít napsaný v DIBI stylu, otázka jestli je to možné. Pokud ne nastává ještě jeden „problém“. Příklady jsem hodně zjednodušil.
1) S DIBI syntaxí
<?php
$sql = "SELECT * FROM %n WHERE [col] = %i OR [col_2] = %i";
$this->context->query($sql, 'table_name', 1, 2);
?>
2) Bez DIBI syntaxe
<?php
$sql = "SELECT * FROM %s WHERE `col` = %d OR `col_2` = %d";
$this->context->query($sql, 'table_name', 1, 2);
?>
Tyto dva příklady mně nejdou, druhý příklad jde až v okamžiku, kdy
to zapíšu takto:
3) Bez DIBI syntaxe se sprintf
<?php
$sql = "SELECT * FROM %s WHERE `col` = %d OR `col_2` = %d";
$this->context->query(sprintf($sql, 'table_name', 1, 2));
?>
…ale přitom v metodě query($statement) na 78 řádku \Nette\Database\Context je metoda func_get_args(), která počítá i s variantou více parametrů a v tom případě to bere, že první je SQL dotaz a další jsou argumenty, ale stejně mi to spadne.
Takže má otázka zní:
1) Proč mi to nechce spolupracovat a vzít neomezený počet
argumentů?
2) Lze použít dibi syntax?
Díky všem za případnou pomoc :)
Editoval martin20a (6. 3. 2014 17:54)
- greeny
- Člen | 405
Nette\Database
používá jednotný zástupný znak
?
místo %cosi
Navíc do Nette se dá dibi přidat, viz https://doc.nette.org/cs/database#…
- martin20a
- Člen | 8
greeny napsal(a):
Nette\Database
používá jednotný zástupný znak?
místo%cosi
Navíc do Nette se dá dibi přidat, viz https://doc.nette.org/cs/database#…
Ahoj, díky za reakci, nějak jsem tento článek proletěl a neuvědomil si, že to je to co hledám. Nicméně na základě článku bych se zeptal jestli správně chápu, že nahrazením za dibi se přestanou cachovat výsledky a už nebudu moct naplno využívat výhody nettedb a nebo jen to dibi bude působit jako preprocessor nettedb?
A ještě tedy jestli nevíš proč mi nejde příklad č.2 z prvního postu :) Díky
edit: na dibi se mě především líbí zápis názvů slopců
[col] je to rychlejší a přehlednější (dle mého) než
col
.
Editoval martin20a (6. 3. 2014 18:33)
- greeny
- Člen | 405
V NetteDb mi přijde lepší zápis stylu
<?php
$rows = $connection->table('table')
->where('a', 'val')
->where('b < ?', 4)
foreach($rows as $row) ...
?>
Nahrazením za dibi přijdeš o všechny výhody NetteDb, prostě místo toho budeš mít dibi.
Příklad číslo 2 by měl fungovat takto:
<?php
$sql = "SELECT * FROM table WHERE `col` = ? OR `col_2` = ?";
$this->context->query($sql, 1, 2);
?>
- David Matějka
- Moderator | 6445
kdyz chces v NDBT pouzit OR, udelej
->table('table')->where('col = ? OR col_2 = ?', 1, 2)