Más

La columna 'SHAPE' no puede ser nula en la base de datos mysql incluso si la cadena de consulta es correcta

La columna 'SHAPE' no puede ser nula en la base de datos mysql incluso si la cadena de consulta es correcta


Estoy tratando de escribir un POLÍGONO en una columna llamada FORMA que es un tipo de geometría. Y creó una consulta que se ve

$ sql = "INSERT INTO rokka (zona, distrito, ubicación, área, FORMA) VALORES ('$ zona', '$ distrito', '$ ubicación', '$ área', PolygonFromText ('$ polywrite'))";

La variable$ polywriteviene como

var polígono = 'Polígono ((' + norestelngLat [0] + "+ norestelngLat [1] + ',' + noroestelngLat [0] +" + noroestelngLat [1] + ',' + suroestelngLat [0] + "+ suroestelngLat [ 1] + ',' + surestelngLat [0] + "+ surestelngLat [1] + ',' + norestelngLat [0] +" + norestelngLat [1] + '))'; $ polywrite = "";

Las matrices contienen las coordenadas. Y al ejecutar

if ($ conexión-> consulta ($ sql) === VERDADERO) {inicio_sesión (); encabezado ('ubicación: admin.html'); session_destroy (); } else {echo "Error:". $ sql. "
". $ conexión-> error;}

El error que muestra es

La columna 'SHAPE' no puede ser nula Error: INSERT INTO rokka (zona, distrito, ubicación, área, SHAPE) VALUES ('Rapti', 'Rolpa', 'Liwang', '603750', PolygonFromText ('Polygon ((85.06290725100276 28.00935569163021,8543.06392 28.0093478254886,85.06393735099435 28.01070145242192,85.06292053985693 28.010709319009717,85.06290725100276 28.00935569163021)) ')) La columna' SHAPE 'no puede ser nula

Pero cada vez que ejecuto la consulta

INSÉRTESE EN rokka (zona, distrito, ubicación, área, FORMA) VALORES ('Rapti', 'Rolpa', 'Liwang', '603750', PolygonFromText ('Polygon ((85.06290725100276 28.00935569163021,85.06392404943365 28.00934.05254886209 85.06290725100276 28.00935569163021)) '))

en mi base de datos directamente Funciona exactamente como debería. Todos los valores se escriben en las columnas respectivas. Ayúdame a descubrir qué estoy haciendo mal.


En línea$ polywrite = ""está tratando de usar código javascript mientras es imposible en el lado de php. Todos los scripts php se ejecutan antes que javascript.
Puede usar proj4php como se menciona en los comentarios.
Otra solución es llenar elpolywritevariable en el lado de javascript y cree una solicitud Ajax enviando 'polywrite' a una página php.

Lado javascript:

var polígono = 'Polígono ((' + norestelngLat [0] + "+ norestelngLat [1] + ',' + noroestelngLat [0] +" + noroestelngLat [1] + ',' + suroestelngLat [0] + "+ suroestelngLat [ 1] + ',' + surestelngLat [0] + "+ surestelngLat [1] + ',' + norestelngLat [0] +" + norestelngLat [1] + '))'; $ .ajax ({url: "prueba. php ", data: {" polywrite ": polygon},}). done (function () {// haz algo cuando termines});

Página php:

$ polywrite = $ _GET ['polywrite']; $ sql = "INSERT INTO rokka (zona, distrito, ubicación, área, FORMA) VALORES ('$ zona', '$ distrito', '$ ubicación', '$ área', PolygonFromText ('$ polywrite'))"; ...

Parece que intenta persistir su entidad y su identificación permanece nula. Es por eso que obtiene un error de violación de restricción.

  • Para simplemente resolver este error, le sugiero que intente crear su tabla de base de datos usando la opción de incremento automático en su campo SHAPE. Debería resolver tu problema, supongo.

    O

  • Al leer la documentación sobre LAST_INSERT_ID (), sugeriría que el valor solo se actualice después de que se ejecute el último disparador. También creé un disparador que inserta el resultado de LAST_INSERT_ID () en otra tabla y siempre inserta el ID de la fila insertada por la declaración INSERT antes o 0 si no había INSERT anterior.

Desde dentro de un disparador de inserción o actualización, siempre puede hacer referencia al estado después de la declaración utilizando NEW.column donde column es un nombre de columna de su tabla. Consulte la documentación para ver ejemplos.