SqlBuilder – složení stringu s sql

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Томас
Člen | 85
+
0
-

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 :-(

CZechBoY
Člen | 3608
+
+1
-

Co prostě vytvořit SqlBuilder ručně?

$sqlBuilder = new SqlBuilder($table, $this->context);
$sql = $this->context->preprocess($sqlBuilder->buildInsertQuery() . ' ?values', $data);

Editoval CZechBoY (2. 1. 2017 19:19)

Томас
Člen | 85
+
0
-

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
+
+1
-

jo, je tam omezení na 10 znaků
si tu třídu zkopíruj a omezení si dej pryč, když to potřebuješ :-)

Томас
Člen | 85
+
0
-

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
+
0
-

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);