通过PHP查询本地PostGIS数据库

时间:2019-01-24 21:18:29

标签: javascript php postgresql leaflet postgis

我正在尝试设置本地的PostGIS数据库中使用的本地传单地图。我已经编写了一个执行查询的PHP文件,但似乎无法正常工作-我对Javascript和PHP都是陌生的,而且不确定如何解决我遇到的问题。

每当我加载index.html时,它都会在PHP文件上运行Ajax请求。该请求只是失败而没有显示任何错误消息。

我认为问题出在PHP文件中,但是打开并没有太大帮助-Web控制台不会报告任何错误,并且显示的内容如下:

$attr{ // echo $attir.", "; //} //echo ";"; //}

这是PHP文件:

<!DOCTYPE html>
<html>
<body>

<h1>Query</h1>


<?php
    #header("Access-Control-Allow-Origin: *");
    #Set header
    #header('Content-type: application/json');
    ini_set('display_errors', 1);
    error_reporting(E_ALL);

    #Get Data
    #$parameter1 = $_POST['lat'];
    #$parameter2 = $_POST['long'];

    $host= 'localhost';
    $port= '5432';
    $dbname = 'database';
    $user = 'user';
    $password = 'password';

    $conn = pg_connect("host=$host port=$port dbname=$dbname user=$user password=$password");
    if (!$conn) {
        echo "Not connected: " . pg_error();
        exit;
    }

    $sql = "SELECT *, ST_AsGeoJSON(ST_Transform(geom, 4326)) AS geojson FROM alb_cr.cr_point WHERE table_id = 761";

    if (!$response = pg_query($conn, $sql)) {
        echo "Query failed";
        exit;
    }

    while ($row = pg_fetch_row($response)) {
        foreach ($row as $i => $attir) {
            echo $attir.", ";
        }
        echo ";";
    }

?>

</body>
</html>

这是Ajax请求:

            $.ajax({
                type:     "GET",
                url:      "localhost/pull.php",
                success: function(data){
                    alert(data);
                    console.log('passed ' + data);
                },
                error: function(){
                    alert("Failed"); 
                }
            });

1 个答案:

答案 0 :(得分:0)

由于您是PHP和Java的新手,所以我可以允许我为您提供一些架构建议。

首先,您需要拥有index.php(或根据您的设计,任何页面应显示查询结果),以将页面主体与AJAX脚本合并到页面主体中,或者(最好)作为单独的脚本与您可能还需要其余的JS,就像在jQuery(用于AJAX)中所做的一样。

<?php
//Output initial page contents
$html = <<<HTML
<!doctype html>
<html>
    <head>
        <!--include jQuery library since, you use it for AJAX-call-->
        <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
    </head>
    <body>
        <h1>Query</h1>
        <div id="result"></div>
        <script>
            $.ajax({
                type: "GET",
                url: "localhost/pull.php",
                success: function (data) {
                    alert(data);
                    console.log('passed ' + data);
                },
                error: function(){
                    alert("Failed"); 
                }
            });
        </script>
    </body>
</html>
HTML;

echo $html;

?>

接下来,我将在请求时使用您单独的localhost / pull.php来响应查询结果:

<?php
    $host= 'localhost';
    $port= '5432';
    $dbname = 'database';
    $user = 'user';
    $password = 'password';

    $conn = pg_connect("host=$host port=$port dbname=$dbname user=$user password=$password");
    if (!$conn) {
        echo "Not connected: " . pg_error();
        exit;
    }

    $sql = "SELECT *, ST_AsGeoJSON(ST_Transform(geom, 4326)) AS geojson FROM alb_cr.cr_point WHERE table_id = 761";

    if (!$response = pg_query($conn, $sql)) {
        echo "Query failed";
        exit;
    }

    while ($row = pg_fetch_row($response)) {
        foreach ($row as $i => $attir) {
            echo $attir.", ";
        }
        echo ";";
    }

?>

有了这个,您应该能够在分别执行pull.php时(或者至少让它以一些有意义的错误响应),将所需格式的查询结果发送回控制台。 之后,您可以在客户端查看(在开发人员工具->网络中)您的AJAX请求是否向浏览器返回了数据。