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

标签 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 查询时,数据已成功存储在数据库中。

最佳答案

检查列的正确属性

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

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

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

创建具有正确属性的列后,您可以将数据插入数据库。但是,您的代码很容易受到 SQL 注入(inject) 和其他类型的数据库黑客攻击,因为您直接插入数据而无需任何类型的身份验证。为了避免它,使用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?

关于php - 如何使用 PHP 在 MySQL 中插入空间数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51374304/

相关文章:

javascript - 地理定位 - 检查某个位置是否属于某个区域

php - 使用 php-webdriver-bindings-0.9.0 在 selenium 中执行 javascript

python - Django mysqlclient 后端在 Windows 中产生 django.db.utils.OperationalError : (2059, <NULL>)

PHP Api iOS - 从 PHP 代码启动应用程序?

java - 任何众所周知的 Java 库,仅返回 REST API 请求的字段

php - "Cannot pass parameter 2 by reference"PHP错误

php - Twitter - twemproxy - memcached - 重试未按预期工作

mysql - ALTER TABLE ORDER BY str_to_date 和 time_to_sec

php - 向表插入数据时遇到问题。代码点火器

java - 处理——美味的数据可视化