[Cartoweb-users] recentering syntax-error?

bram2006 bram at terneuzen.com
Sun Apr 2 14:36:00 EDT 2006


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



More information about the Cartoweb-users mailing list