【问题标题】:Postgresql could not determine data type of parameter $1 using php pdoPostgresql 无法使用 php pdo 确定参数 $1 的数据类型
【发布时间】:2017-04-14 07:54:48
【问题描述】:

我想在查询中打印字符串值。我在数组中定义了变量。 在我执行查询时正在运行的以下主要查询中,我得到了结果。

$query = "SELECT count, mahkoy_kod , mahkoy_adi, ilce_id, st_x(st_transform(st_centroid(t2.geom),4326)) as lng,st_y(st_transform(st_centroid(t2.geom),4326)) as lat from 
(SELECT count(*),t1.knt_f_mahkoy_id FROM a.s_all t1                                             
where st_intersects(t1.geom,st_transform(ST_GeomFromText( format('POLYGON((%s %s, %s %s, %s %s, %s %s, 
%s %s))', 29.743849487304715, 41.24992343698962, 28.481108398437527, 41.24992343698962, 
28.481108398437527, 40.749326052646055, 29.743849487304715, 40.749326052646055, 
29.743849487304715, 41.24992343698962 ), 4326),500000)) 
group by knt_f_mahkoy_id ) t1
join analiz.k_spt_dis_mah_koy t2 on t1.knt_f_mahkoy_id = t2.mahkoy_kod 
where  count > 100";

当我使用 php pdo 时,我得到的错误是

无法确定参数 $1 的数据类型 块引用

这是php代码。这里用于运行查询的数据库类。当我使用 var_dump 打印数据时出现错误。我怎么解决这个问题?

$query = "SELECT count, mahkoy_kod , mahkoy_adi, ilce_id, st_x(st_transform(st_centroid(t2.geom),4326)) as lng,st_y(st_transform(st_centroid(t2.geom),4326)) as lat from 
(
  SELECT count(*),t1.knt_f_mahkoy_id FROM a.s_all t1                                             
  where st_intersects(t1.geom,st_transform(ST_GeomFromText( format('POLYGON((%s %s, %s %s, %s %s, %s %s, %s %s))', 
 :long_high, :lat_high, :long_low, :lat_high, :long_low, :lat_low, :long_high, :lat_low, :long_high, :lat_high ), 4326),500000)) 
  group by knt_f_mahkoy_id 
) t1
  join analiz.k_spt_dis_mah_koy t2 on t1.knt_f_mahkoy_id = t2.mahkoy_kod  where  count > 100";

$data = Database::query($query, array("long_high"=>$long_high, "lat_high"=>$lat_high, "long_low"=>$long_low, "lat_low"=>$lat_low));

【问题讨论】:

    标签: php postgresql pdo


    【解决方案1】:

    我不太喜欢 postgres,但假设你可以用另一种方式来做

    $polygon = sprintf('POLYGON((%s %s, %s %s, %s %s, %s %s, %s %s))', 
    $long_high, $lat_high, $long_low, $lat_high, $long_low, $lat_low, $long_high, $lat_low, $long_high, $lat_high);
    
    $query = "SELECT count, mahkoy_kod , mahkoy_adi, ilce_id, st_x(st_transform(st_centroid(t2.geom),4326)) as lng,st_y(st_transform(st_centroid(t2.geom),4326)) as lat from 
    (
      SELECT count(*),t1.knt_f_mahkoy_id FROM a.s_all t1                                             
      where st_intersects(t1.geom,st_transform(ST_GeomFromText( ?, 4326),500000)) 
      group by knt_f_mahkoy_id 
    ) t1
      join analiz.k_spt_dis_mah_koy t2 on t1.knt_f_mahkoy_id = t2.mahkoy_kod  where  count > 100";
    
    $data = Database::query($query, array($polygon));
    

    这里的想法是提供一个 POLYGON 函数作为完整的字符串文字。它既安全又兼容。

    【讨论】:

      猜你喜欢
      • 2021-03-14
      • 2017-10-29
      • 1970-01-01
      • 1970-01-01
      • 2021-11-20
      • 2019-09-29
      • 2018-02-19
      • 1970-01-01
      • 2013-03-30
      相关资源
      最近更新 更多