Php PostGisl Pdo准备插入:引用函数

Php PostGisl Pdo准备插入:引用函数,php,sql,postgresql,pdo,postgis,Php,Sql,Postgresql,Pdo,Postgis,我对准备有以下问题: $query_prep_insert['Prepare'] = 'INSERT INTO schema_125."testalogg" (the_geom, OBJECTID_1) VALUES (?,?),(?,?);'; $query_prep_insert['Insert'] = array( 'ST_SetSRID(ST_GeomFromGeoJSON(\'{"type":"Point","coordinates":[961223.18558917,5745885

我对准备有以下问题:

$query_prep_insert['Prepare'] = 'INSERT INTO schema_125."testalogg" (the_geom, OBJECTID_1) VALUES (?,?),(?,?);';
$query_prep_insert['Insert'] = array(
'ST_SetSRID(ST_GeomFromGeoJSON(\'{"type":"Point","coordinates":[961223.18558917,5745885.0742317]}\'), 3395)',
'1540',
'ST_SetSRID(ST_GeomFromGeoJSON(\'{"type":"Point","coordinates":[961201.163454,5745.5677]}\'), 3395)',
'1541'
);
对于执行

$query_prep_insert['Prepare'] = 'INSERT INTO schema_125."testalogg" (the_geom, OBJECTID_1) VALUES (?,?),(?,?);';
$query_prep_insert['Insert'] = array(
'ST_SetSRID(ST_GeomFromGeoJSON(\'{"type":"Point","coordinates":[961223.18558917,5745885.0742317]}\'), 3395)',
'1540',
'ST_SetSRID(ST_GeomFromGeoJSON(\'{"type":"Point","coordinates":[961201.163454,5745.5677]}\'), 3395)',
'1541'
);
然后,使用PDO发送查询:

$stmt = $connection->prepare( $query_prep_insert['Prepare'] );
$stmt->execute( $query_prep_insert['Insert'] );
我得到错误

$query_prep_insert['Prepare'] = 'INSERT INTO schema_125."testalogg" (the_geom, OBJECTID_1) VALUES (?,?),(?,?);';
$query_prep_insert['Insert'] = array(
'ST_SetSRID(ST_GeomFromGeoJSON(\'{"type":"Point","coordinates":[961223.18558917,5745885.0742317]}\'), 3395)',
'1540',
'ST_SetSRID(ST_GeomFromGeoJSON(\'{"type":"Point","coordinates":[961201.163454,5745.5677]}\'), 3395)',
'1541'
);
PDOStatement::execute():SQLSTATE[XX000]:内部错误:7错误:
分析错误-无效的几何体提示:“ST”已解决:将此用于准备:

$query_prep_insert['Prepare'] = 'INSERT INTO schema_125."testalogg" (the_geom, OBJECTID_1) VALUES ( ST_SetSRID(ST_GeomFromGeoJSON( ? ), 3395), ? );';
而只是执行的原始值:

$query_prep_insert['Insert'] = array(
'{"type":"Point","coordinates":[961223.18558917,5745885.0742317]}',
'1541'
);

谢谢,弗兰克。

函数是一个对象,而不是一个值。如果没有此查询所需的所有对象,则无法准备查询。因此,我必须使用prepare传递所有静态值,然后直接执行其他查询,而不使用prepare?即使静态值也可以作为值输入,但要生成查询计划,必须先准备所有对象(如表、列和函数)。当查询计划就绪时,您可以告诉数据库此查询要使用哪些值并执行此查询。Frank tanks,您保存了我的一周。它工作得很好。