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

0

Я хочу сохранить свою координату из моего приложения 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, данные успешно сохраняются в базе данных.

  • 2
    dev.mysql.com/doc/refman/5.6/en/spatial-types.html - в основном посмотрите на формат данных
  • 0
    Вы уверены, что у вас есть данные в $nop и $plot_bng ? И если вы просто пытаетесь вставить данные в базу данных без какой-либо проверки, вы широко открыты для SQL-инъекций. Попробуйте использовать prepared statements и mysqli_real_escape_string прежде чем взаимодействовать с базой данных!
Теги:
spatial
spatial-query

2 ответа

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
    только geom - это тип данных геометрии. Я попробую ваш код, в коде $ stmt-> bind_param ("ss", $ plot_bng, $ nop); что это >> "сс"?
  • 0
    Прежде всего, прочитайте ссылку под кодом, затем вы получите общие знания о подготовленных утверждениях. Чтобы ответить на ваш вопрос, s обозначает string тип, i обозначает целочисленный тип, d обозначает double а b statnds - BLOB .
Показать ещё 1 комментарий
0

Вы не правильно пишете свой var, попробуйте это

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

Когда вы пишете это, вары - это обычный текст...

  • 0
    Я только что попробовал ваш код, и я тестировал в почтальоне, статус в почтальоне "200 OK", но когда я проверял свою БД, я не нашел новых данных.
  • 0
    Вы всегда будете получать "200 OK", если вы всегда отправляете json_encode (array ("value" => 1)) ...
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню