Suite

La colonne 'SHAPE' ne peut pas être nulle dans la base de données mysql même si la chaîne de requête est correcte

La colonne 'SHAPE' ne peut pas être nulle dans la base de données mysql même si la chaîne de requête est correcte


J'essaie d'écrire un POLYGONE dans une colonne nommée SHAPE qui est un type de géométrie. Et créé une requête qui ressemble

$sql = "INSÉRER DANS rokka(zone,district,location,area,SHAPE) VALUES ('$zone','$district','$location','$area',PolygonFromText('$polywrite'))" ;

La variable$polywritevient comme

var polygon = 'Polygon((' + northlngLat[0] +"+ northlngLat[1] + ',' + NorthwestlngLat[0] +"+ NorthwestlngLat[1] + ',' + southlngLat[0] +"+ southlngLat[ 1] + ',' + sud-estlngLat[0] +"+ sud-estlngLat[1] + ',' + nord-estlngLat[0] +"+ nord-estlngLat[1] + '))' ; $polywrite = "";

Les tableaux contiennent les coordonnées. Et lors de l'exécution

if ($connect->query($sql) === TRUE) { session_start(); header('emplacement : admin.html'); session_destroy(); } else { echo "Erreur : " . $sql. "
" . $connect->erreur; }

L'erreur qu'il affiche est

La colonne « SHAPE » ne peut pas être nulle. 28.0093478254886,85.06393735099435 28.01070145242192,85.06292053985693 28.010709319009717,85.06290725100276 28.00935569163021)))) La colonne 'SHAPE' ne peut pas être nulle

Mais chaque fois que je lance la requête

INSÉRER DANS rokka (zone, district, emplacement, zone, FORME) VALEURS ('Rapti', 'Rolpa', 'Liwang','603750', PolygonFromText('Polygon((85.06290725100276 28.0935569163021,85.0650992404943365 28.0093472062354896.07.09.08.06290725100276 28.00935569163021. 85.06290725100276 28.00935569163021))'))

dans ma base de données directement Cela fonctionne exactement comme il se doit. Toutes les valeurs sont écrites dans les colonnes respectives. S'il vous plaît aidez-moi à comprendre ce que je fais mal.


En ligne$polywrite = ""vous essayez d'utiliser du code javascript alors qu'il est impossible du côté php. Tous les scripts php s'exécutent avant javascript.
Vous pouvez utiliser proj4php comme mentionné dans les commentaires.
Une autre solution consiste à remplir lepolyécriturevariable du côté javascript et créez une requête Ajax envoyant 'polywrite' à une page php.

Côté javascript :

var polygon = 'Polygon((' + northlngLat[0] +"+ northlngLat[1] + ',' + NorthwestlngLat[0] +"+ NorthwestlngLat[1] + ',' + southlngLat[0] +"+ southlngLat[ 1] + ',' + sud-estlngLat[0] +"+ sud-estlngLat[1] + ',' + nord-estlngLat[0] +"+ nord-estlngLat[1] + '))' ; $.ajax({ url : "test. php", data: { "polywrite": polygon }, }).done(function() { // faire quelque chose une fois terminé });

Page php :

$polywrite = $_GET['polywrite'] ; $sql = "INSÉRER DANS rokka(zone,district,emplacement,zone,FORME) VALEURS('$zone','$district','$location','$zone',PolygonFromText('$polywrite'))" ; …

Il semble que vous essayez de conserver votre entité et son identifiant reste nul. C'est pourquoi vous obtenez une erreur de violation de contrainte.

  • Pour résoudre simplement cette erreur, je vous suggère d'essayer de créer votre table de base de données en utilisant l'option d'auto-incrémentation sur votre champ SHAPE. Cela devrait résoudre votre problème, je suppose.

    OU ALORS

  • En lisant la documentation sur LAST_INSERT_ID(), je suggérerais que la valeur n'est mise à jour qu'après l'exécution du dernier déclencheur. J'ai également créé un déclencheur qui insère le résultat de LAST_INSERT_ID() dans une autre table et il insère toujours l'ID de la ligne insérée par l'instruction INSERT avant ou 0 s'il n'y avait pas d'INSERT précédent.

À partir d'un déclencheur d'insertion ou de mise à jour, vous pouvez toujours vous référer à l'état après l'instruction en utilisant NEW.column où colonne est un nom de colonne de votre table. Voir la documentation pour des exemples


Voir la vidéo: Les muscles postérieurs du tronc