如何用php在mysql中插入空间数据?

7xzttuei  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(330)

我想把我的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中尝试插入查询时,数据成功地存储在数据库中。

zour9fqk

zour9fqk1#

检查列的正确属性
首先,确保使用 GEOMETRY 关键字。

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

通过身份验证将数据插入数据库
创建具有正确属性的列后,可以将数据插入数据库。但是,您的代码对 SQL Injection 以及其他类型的数据库黑客攻击,因为您直接插入数据而无需任何身份验证。为了避免它,使用 prepared statements 以及 mysqli_real_escape_string 功能。另外,检查您是否有正确的查询语法并替换 STGeomFromTextST_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);
?>

参考和进一步阅读
在mysql中创建空间列
填充空间列
如何避免sql注入?
如何使用准备好的语句?

oxiaedzo

oxiaedzo2#

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

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

在你写的时候,变量只是普通的文本。。。

相关问题