php - 如何使用 PHP 在 MySQL 中插入空间数据?
问题描述
我想将我的坐标从我的 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 Injection
但是,由于您直接插入数据而无需任何类型的身份验证,因此您的代码对和其他类型的数据库黑客攻击是广泛开放的。为了避免它,使用prepared statements
和mysqli_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);
?>
参考和进一步阅读
推荐阅读
- django - Django 在尝试创建 postgresql 数据库时抛出“[12728] 错误:CREATE DATABASE 无法在事务块内运行”
- sql - 这两个存储过程之间是否存在功能差异?
- java - 为什么我的 java 应用程序在服务器上看不到 mariadb 驱动程序,即使它在本地运行良好?
- python - 绘制 dataFrame 中所有值的直方图
- python - 删除 Pandas 列中所有大于一的空格
- javascript - 学习 JS ......似乎被困在这个练习中......不知道我做错了什么
- tensorflow - Pytorch Autograd:运行时错误“只能为标量输出隐式创建grad”是什么意思
- json - 如何在 Angular 中的页面加载时发出 HTTP 请求(使用按钮)
- apache-flink - 如何获取 Flink 保存点 ID?
- jolt - 如何使用 Jolt 更改大型 Json 中一个字段的名称