Как вставить пространственные данные в MySQL с помощью PHP?

Я хочу сохранить мои координаты из приложения Android в базу данных MySQL. Для этого я создал API в PHP, но мой код не работает.

Вот мой 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);
?>

Когда я пытаюсь выполнить запрос INSERT в phpMyadmin, данные успешно сохраняются в базе данных.

0

Решение

Вы не пишете свою переменную правильно, попробуйте вот так

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

Как вы пишете, переменные — это просто обычный текст …

0

Другие решения

Проверьте правильное свойство для столбцов

Прежде всего, убедитесь, что вы создали правильные пространственные столбцы в базе данных, используя 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);
?>

Ссылка и дальнейшее чтение

Создание пространственных столбцов в MySQL
Заполнение пространственных столбцов
Как избежать SQL-инъекций?
Как использовать подготовленные заявления?

0

По вопросам рекламы [email protected]