我已經與Postgresql一些工作,但我仍然是一個新手。我通常會默認創建太多查詢,並通過我的方式來獲取查詢所需的結果。這次我想寫一些更精簡的代碼,因爲我將處理一個大型數據庫,並且代碼需要儘可能簡潔。嘗試通過pg_query_params創建和回顯數組
所以我有很多點數據,然後我有很多縣。我有兩個表格,「縣」和「ltg_data」(許多點)。我的目標是通讀指定數量的縣(如數組中給出的)並確定每個縣有多少點。我的新手,這樣的重複和低效的方式是通過編寫查詢這樣的:
$klamath_40_days = pg_query($conn, "SELECT countyname, time from counties, ltg_data where st_contains(counties.the_geom, ltg_data.ltg_geom) and countyname");
$klamath_rows = pg_num_rows($klamath_40_days);
如果我運行像上面的每個縣一個單獨的查詢,它給了我很好的輸出,但它的重複和低效。我寧願使用循環。最終,我需要通過URL將參數傳遞給查詢。當我嘗試在PHP循環運行,我得到的錯誤說:「查詢失敗:ERROR:列‘禪師’不存在」等,這裏的循環:
$counties = array ('Jackson', 'Klamath');
foreach ($counties as $i) {
echo "$i<br>";
$jackson_24 = pg_query($conn, "SELECT countyname, time from counties, ltg_data where st_contains(counties.the_geom, ltg_data.ltg_geom) and countyname = ".$i." and time >= (NOW() - '40 DAY'::INTERVAL)");
$jackson_rows = pg_num_rows($result);
}
echo "$jackson_rows";
於是我研究了pg_query_params功能在PHP中,我認爲這會有所幫助。但我運行此腳本:
$counties = array('Jackson', 'Josephine', 'Curry', 'Siskiyou', 'Modoc', 'Coos', 'Douglas', 'Klamath', 'Lake');
$query = "SELECT countyname, time from counties, ltg_data where st_contains(counties.the_geom, ltg_data.ltg_geom) and countyname = $1 and time >= (NOW() - '40 DAY'::INTERVAL)";
$result = pg_query_params($conn, $query, $counties);
而且我得到這個錯誤:查詢失敗:ERROR:綁定消息用品9點的參數,而是事先準備好的聲明「」要求1
所以基本上,我想知道什麼是將參數傳遞給postgresql查詢的最佳方式(可能是URL中傳遞參數或數組中的多個元素)?然後我想以有組織的方式迴應總結結果。
感謝您的任何幫助。
這太好了......謝謝!我很難迴應結果。我使用pg_query和$ result = pg_query($ conn,$ query);並使用while語句while($ row = pg_fetch_row($ result)){echo「$ row [0] $ row [1] \ n」; }它沒有運行或給出任何錯誤。我在這裏做錯了什麼? – user1610717
對不起,在查詢語句末尾錯過了一個分號。還有一些錯誤,但在工作。 – user1610717
啊,對。還要測試'!$ result'來檢查你是否沒有數據庫錯誤。否則你的'while'語句看起來不錯。 – Patrick