Nette Database – nefunkční fetch

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

V modelu mám tento dotaz (zkrácená verze):

return $this->database->query("
            SET @lat = ?;
            SET @lng = ?;
            SELECT ST_ASTEXT(location) FROM places
            WHERE ST_CONTAINS(
            ST_GEOMFROMTEXT('POLYGON((@lat @lng))'),
            location) = 1", $lat, $lng)->fetchAll();

A s tím jsou spojeny dva problémy:

  1. pokud se vyskytují místo @lat a @lng v polygonu otazníky a předám požadované parametry, nedoplní se
  2. závažnější problém je ale to, že při snaze o provedení fetchAll() dostávám chybu SQLSTATE[HY000]: General error, takže se nemám ani čeho chytit

Zná někdo nějaké řešení?

CZechBoY
Člen | 3608
+
0
-

Posli to jako 3 dotazy.

curl6
Člen | 29
+
0
-

CZechBoY napsal(a):

Posli to jako 3 dotazy.

Když jsem ty dotazy rozdělil, tak mám tohle:

$this->database->query("
SET @area = ST_GEOMFROMTEXT('POLYGON((? ?, ? ?, ? ?, ? ?, ? ?, ? ?))');",
[$lat, $lng]));

Když si dotaz dumpnu, tak vidím, že otazníky se nenahradí hodnotami parametrů. Vypíše se výchozí příkaz a až za středníkem hodnoty.

Honza.Mottl
Člen | 104
+
0
-

V Oraclu bych to poslal jako celý blok uzavřený do BEGIN a END. Řekl bych, že by to tady taky mohlo jít.

curl6
Člen | 29
+
0
-

Honza.Mottl napsal(a):

V Oraclu bych to poslal jako celý blok uzavřený do BEGIN a END. Řekl bych, že by to tady taky mohlo jít.

Strukturu toho dotazu už se mi povedlo vyřešit, ale pořád nevím, jak tam dostat ty hodnoty proměnných.

CZechBoY
Člen | 3608
+
0
-

A jaky je typ proměnných? Měl bys dávat do parametrů jen skalární typy, případně list skalárních hodnot.

Editoval CZechBoY (19. 12. 2016 9:14)

curl6
Člen | 29
+
0
-

CZechBoY napsal(a):

A co to je typ proměnných? Měl bys dávat do parametrů jen skalární typy, případně list skalárních hodnot.

Float.

CZechBoY
Člen | 3608
+
0
-

Tak potom tech otazniku mas nejak moc ne?
Btw do query metody davaj kazdy parametr jako parametr; do metody queryArgs jako jedno pole parametru.