如何使用PHP在MySQL中插入空间数据?

时间:2018-07-17 06:09:19

标签: php mysql api spatial spatial-query

我想将坐标从我的Android应用程序保存到MySQL数据库。为此,我用PHP创建了一个API,但是我的代码无法正常工作。

这是我的PHP代码:

<?php
  include_once 'db.php';

  $nop = $_POST['nop'];
  $plot_bng = $_POST['plot_bng'];

  $result = mysqli_query($con, "INSERT INTO sp_house (geom, d_nop)
                                VALUES (STGeomFromText('POINT($plot_bng)'), '$nop')");

  echo json_encode(array("value"=>1));

  mysqli_close($con);
?>

当我在phpMyadmin中尝试INSERT查询时,数据已成功存储在数据库中。

2 个答案:

答案 0 :(得分:1)

检查列的正确属性

首先,请确保使用GEOMETRY关键字在数据库中创建了正确的空间列。

CREATE TABLE sp_house (geom GEOMETRY, d_nop VARCHAR(255));

通过身份验证将数据插入数据库

创建具有正确属性的列后,可以将数据插入数据库。但是,由于您无需任何身份验证即可直接插入数据,因此您的代码对SQL Injection和其他类型的数据库黑客非常开放。为了避免这种情况,请使用prepared statementsmysqli_real_escape_string函数。 此外,请检查查询语法是否正确,并将STGeomFromText替换为ST_GeomFromText

<?php
  include_once 'db.php';

  $nop = $_POST['nop'];
  $plot_bng = $_POST['plot_bng'];

  // You can also check that the variables are empty or not ...

  // Clean the variables and prepare for inserting
  $plot_bng = mysqli_real_escape_string($con, $plot_bng);
  $nop = mysqli_real_escape_string($con, $nop);
  $sql = "INSERT INTO sp_house (geom, d_nop)
                                VALUES (ST_GeomFromText(POINT(?)), ?)";

  // Prepared statement for inserting
  $stmt = $conn->prepare($sql); // prepare statement for inserting
  $stmt->bind_param("ss",$plot_bng,$nop); // replace question marks with values
  $stmt->execute(); // execute command
  $stmt->close(); // close connection

  echo json_encode(array("value"=>1));

  mysqli_close($con);
?>

参考和进一步阅读

Creating Spatial Columns in MySQL
Populating Spatial Columns
How to avoid SQL Injection?
How to use prepared statements?

答案 1 :(得分:0)

您没有正确编写var,请尝试这样

$result = mysqli_query($con, "INSERT INTO sp_house (geom, d_nop)
VALUES (STGeomFromText('POINT(".$plot_bng.")'), '".$nop."')");

在编写时,变量只是普通文本...