Я хочу сохранить мои координаты из приложения 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, данные успешно сохраняются в базе данных.
Вы не пишете свою переменную правильно, попробуйте вот так
$result = mysqli_query($con, "INSERT INTO sp_house (geom, d_nop)
VALUES (STGeomFromText('POINT(".$plot_bng.")'), '".$nop."')");
Как вы пишете, переменные — это просто обычный текст …
Проверьте правильное свойство для столбцов
Прежде всего, убедитесь, что вы создали правильные пространственные столбцы в базе данных, используя 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-инъекций?
Как использовать подготовленные заявления?