[Cartoweb-users] recentering syntax-error?
Pierre GIRAUD
pierre.giraud at camptocamp.com
Tue Apr 4 06:56:51 EDT 2006
I imagine you're using a 4.8.x version of mapserver and the problem you
encountered is due to a Mapserver bug.
http://mapserver.gis.umn.edu/bugs/show_bug.cgi?id=1629
If your cartoweb application is hosted on a Debian system, you just have
to update the mapscript package with the new patched version proposed by
camptocamp.
http://cartoweb.org/doc/cw3.2/xhtml/appendix.debian_mapserver.html
Regards
Pierre GIRAUD
bram2006 wrote:
> I tried to resolve the problem by modifying the demoPlugins-project
> step by step. I did not change any code. Below is a part of the
> mapfile in which I changed the airport layer from a shape into a
> postgistable. This postgislayer can be displayed correctly, the
> search on aeroportnames works fine, but when recentering there is a
> mapservererror. Mapserver takes the 'id_attribute_string' in the
> WHERE-clause but the syntax isn't correct. I could'nt figure out where
> and how mapserver is told to take this value. Has anyone succeeded in
> using a postgislayer together with the demoLocation-plugin? When I use
> the aerofacp.shp everything works fine.
>
> I also turned magic-quotes on in php.ini, but no result.
> Bram
>
> LAYER
> NAME "airport"
> TYPE POINT
> # DATA "aerofacp"
> TEMPLATE "ttt"
> CONNECTIONTYPE POSTGIS
> CONNECTION "dbname=demo_plugins host=localhost user=www-data
> password=1234 port=5432"
> DATA "the_geom from airport as foo using unique ID using SRID=-1"
> METADATA
> "exported_values" "recenter_name_string,id_attribute_string"
> "recenter_name_string" "NAM"
> "id_attribute_string" "OGC_FID|string"
> "query_returned_attributes" "NAM"
> END
>
> errorreport:
>
> Class : SoapFaultWrapper
> Message : Mapserver error: Error in msDrawMap(): Failed to draw layer
> named 'airport'.
> Error in prepare_database(): Error executing POSTGIS DECLARE (the
> actual query) statement: 'DECLARE mycursor BINARY CURSOR FOR SELECT
> OGC_FID::text,NAM::text,asbinary(force_collection(force_2d(the_geom)),'NDR'),ID::text
> from airport as foo WHERE (OGC_FID = 'OGC_FID in ('42')') and
> (the_geom && setSRID( 'BOX3D(881945.695862477
> 5122071.74000373,1040695.61013752 5233196.67999627)'::BOX3D,-1) )'
> Postgresql reports the error as 'ERROR: syntax error at or near "42"
> at character 180
> '
>
> ....
>
> Backtrace:
>
> file: 222 -
> C:\wamp06\www\cartoweb3\coreplugins\images\server\ServerImages.php
> call: ServerContext->checkMsErrors()
>
> file: 305 - C:\wamp06\www\cartoweb3\server\Cartoserver.php
> call: ServerImages->drawMainmap(Object(Images))
>
> file: 337 - C:\wamp06\www\cartoweb3\server\Cartoserver.php
> call: Cartoserver->doGetMap(Object(MapRequest))
>
> Alexandre Saunier schreef:
>
>> Hello,
>>
>> well it seems that Postgres does not appreciate the non-escaped
>> quotes in "name = 'name in ('Belgium')'".
>> I assume that "Belgium" is the recentering query string or something?
>>
>> I don't know where this part of the SQL query is built but try to
>> addslash() the incoming querystring in your plugin. There's a
>> built-in static method available in CW for that: Utils::addslashes()
>> => it adds slashes in front of quotes if it as detected that PHP
>> magic_quotes are off.
>>
>> Anyway your WHERE clause is kinda weird, isn't it? There's probably
>> too many "name" in it...
>>
>> AS
>>
>> bram wrote:
>>
>>> Hi list,
>>>
>>> I used the demoLocation plugin from the demoPlugins-project in
>>> myproject, which goes fine. But when I choose an item to
>>> recenter on a syntax error occurs. I can't imagine there still is
>>> a bug somewhere in a script so obviously I'm making a mistake
>>> somewhere. I tried other id_attributes_string & string/value
>>> combinations. Who knows what's going wrong?
>>>
>>> Part of the mapfile:
>>>
>>> CONNECTIONTYPE POSTGIS
>>> CONNECTION "dbname=edit_db host=localhost user=www-data
>>> password=a123 port=5432"
>>> DATA "the_geom from (select the_geom, area, gid, name, oid from
>>> countries where name < 'C') as foo2 using unique oid using SRID=-1"
>>> METADATA
>>> "exported_values" "recenter_name_string,id_attribute_string"
>>> "recenter_name_string" "name"
>>> "id_attribute_string" "name|string"
>>> "query_returned_attributes" "name area"
>>>
>>>
>>> Errorreport:
>>>
>>> Error in prepare_database(): Error executing POSTGIS DECLARE (the
>>> actual query) statement: 'DECLARE mycursor BINARY CURSOR FOR SELECT
>>> name::text,asbinary(force_collection(force_2d(the_geom)),'NDR'),oid::text
>>> from (select the_geom, area, gid, name, oid from countries where
>>> name < 'C') as foo2 WHERE (name = 'name in ('Belgium')') and
>>> (the_geom && setSRID( 'BOX3D(-2843979.38207143
>>> -1361319.536,2888428.68507143 2651366.111)'::BOX3D,-1) )' Postgresql
>>> reports the error as 'ERROR: syntax error at or near "Belgium" at
>>> character 227
>>> '
>>>
>>> Thanks for help!
>>>
>>> Bram
>>>
>>> _______________________________________________
>>> Cartoweb-users mailing list
>>> Cartoweb-users at lists.maptools.org
>>> http://lists.maptools.org/mailman/listinfo/cartoweb-users
>>
>>
>>
>
> _______________________________________________
> Cartoweb-users mailing list
> Cartoweb-users at lists.maptools.org
> http://lists.maptools.org/mailman/listinfo/cartoweb-users
--
_________________________________________________________
Pierre GIRAUD
Géomaticien, Analyste
Camptocamp France SAS
Savoie Technolac, BP 352
73377 Le Bourget du Lac, Cedex
Tel : 00 33 4 79 44 44 93
Mail : pierre.giraud at camptocamp.com
http://www.camptocamp.com
More information about the Cartoweb-users
mailing list