2017-04-14 23 views
0

クエリ内に文字列値を出力したいとします。変数を配列で定義しました。 私はクエリを実行するときに動作している以下のメインクエリで、私は結果を取得します。

私はPHPのPDOを使用すると、私はエラーが

あり得る

$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コードは$ 1です BLOCKQUOTE

をパラメータのデータタイプを決定できませんでした。クエリ実行に使用されるデータベースクラス。私は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)); 

答えて

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機能を提供することです。それは安全で互換性があります。

+0

ありがとうございました! – Fatih

関連する問題