Я хочу сохранить свою координату из моего приложения 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, данные успешно сохраняются в базе данных.
Проверьте правильное свойство для столбцов
Прежде всего, убедитесь, что вы создали правильные пространственные столбцы в базе данных, используя ключевое слово 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?
Как использовать подготовленные заявления?
s
обозначает string
тип, i
обозначает целочисленный тип, d
обозначает double
а b
statnds - BLOB
.
Вы не правильно пишете свой var, попробуйте это
$result = mysqli_query($con, "INSERT INTO sp_house (geom, d_nop)
VALUES (STGeomFromText('POINT(".$plot_bng.")'), '".$nop."')");
Когда вы пишете это, вары - это обычный текст...
$nop
и$plot_bng
? И если вы просто пытаетесь вставить данные в базу данных без какой-либо проверки, вы широко открыты для SQL-инъекций. Попробуйте использоватьprepared statements
иmysqli_real_escape_string
прежде чем взаимодействовать с базой данных!