SqlBuilder – složení stringu s sql
- Томас
- Člen | 85
Zdravím,
potřeboval bych vědět, jak složit sql dotaz? Ale pouze jako string, nechci, aby se mi ten query pustil do databáze, potřebuju ho jen složit a s tím stringem dále pracovat, ale nechci ho pustit do DB. Jak je to možné udělat?
// zkoušel jsem
$this->context->table('xx')->getSqlBuilder($this->context->buildInsertQuery() . ' ?values', $array)->getQueryString();
Což mi dotaz vráti, v pořádku, přesně to, co chci… ale ten dotaz se rovnou pustí do DB a ten row tam už je, nechci ho tam.
Napadla mě ještě transakce
$this->context->beginTransaction();
// to stejny jak predtim
$this->rollback();
Jenže používám MyISAM, takže bohužel…
Neříkejte mi, že neexistuje nějakej normální způsob? Nikde jsem to nedohledal… díky za reakce :-)
BTW:
zkoušel jsme ještě
$this->context->table('xx')->insert($args)->getSql(); // getSqlBuilder
Ale to mi psalo, že volám getSql() na ActiveRow, což neexistuje :-(
- Томас
- Člen | 85
CZechBoY napsal(a):
Co prostě vytvořit
SqlBuilder
ručně?$sqlBuilder = new SqlBuilder($table, $this->context); $sql = $this->context->preprocess($sqlBuilder->buildInsertQuery() . ' ?values', $data);
Hmmm, dobré, ale preprocess mi vrací array, nikoli SQL. Moc to nechápu, jak to funguje, na 0 indexu je klasický query a v druhým indexu je další pole s parametry, které tam většinou nejsou, jsou tam jenom, když je to delší string + nevím kterej to je … takže nevím no
btw: ty parametry v poli potom chybí v query a je tam jen „?“, potřeboval bych kompletní query, jak ho můžu ručně vzít a hodit do db klidně manuálně
Editoval Томас (2. 1. 2017 21:28)
- CZechBoY
- Člen | 3608
jo, je tam omezení
na 10 znaků
si tu třídu zkopíruj a omezení si dej pryč, když to potřebuješ :-)
- Томас
- Člen | 85
CZechBoY napsal(a):
jo, je tam omezení na 10 znaků
si tu třídu zkopíruj a omezení si dej pryč, když to potřebuješ :-)
Hm hm, tak jsem to upravil přímo v té třídě, snad to nic neovlivní :-D díky šéfe
- CZechBoY
- Člen | 3608
Si ji zkopíruj. Ovlivní to akorát to, že se budou předávat i dlouhý stringy přes query string namísto parametru.
$sqlBuilder = new SqlBuilder($table, $this->context);
$preprocessor = new LongStringSqlPreprocessor($this->context->getConnection());
$sql = $preprocessor->preprocess($sqlBuilder->buildInsertQuery() . ' ?values', $data);