sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo insertar datos espaciales en MySQL con PHP?

Marque la propiedad correcta para las columnas

En primer lugar, asegúrese de haber creado las columnas espaciales correctas en la base de datos utilizando GEOMETRY palabra clave.

CREATE TABLE sp_house (geom GEOMETRY, d_nop VARCHAR(255));

Insertar datos en la base de datos con autenticación

Después de crear las columnas con la propiedad correcta, puede insertar los datos en su base de datos. Sin embargo, su código está ampliamente abierto a SQL Injection y otro tipo de piratería de bases de datos, ya que inserta datos directamente sin ningún tipo de autenticación. Para evitarlo, utilice prepared statements y el mysqli_real_escape_string función. Además, compruebe que tiene la sintaxis correcta para la consulta y reemplace STGeomFromText a 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);
?>

Referencia y lecturas adicionales

Creación de columnas espaciales en MySQL
Relleno de columnas espaciales
Cómo evitar la inyección SQL ?
Cómo usar declaraciones preparadas ?