Как вставить данные точки в mysql с помощью PDO bindParam?

ДЕТАЛИ

Я хотел бы использовать пространственное расширение mysql, поэтому я пытаюсь хранить долготу и широту в таблице mysql типа данных POINT с помощью bindParam. К сожалению, я продолжаю получать ошибку SQLSTATE [23000]: Нарушение ограничения целостности: 1048 «Местоположение» не может быть нулевым.

Я проверил, что долгота и широта имеют значения. Так что проблема должна быть с моим кодом, но я не вижу, что я делаю неправильно.

Вот код, который я использую.

$location=$latitude." ".$longitude; $sql = "INSERT INTO my_geodata SET location = PointFromText('POINT(:location)')"; //INSERT INTO my_geodata SET location = PointFromText('POINT(-41 12)'); try { $stmt = $dbh->prepare($sql); $stmt->bindParam(':location', $location, PDO::PARAM_STR); $stmt->execute(); $dbh = null; } catch(PDOException $e) { echo $error=$e->getMessage(); } 

ВОПРОС

Что я делаю не так? Как вставить долготу и широту в таблицу mysql (которая использует тип данных POINT) с PDO и bindParam?

ВАРИАНТ

Основываясь на ответе AgreeOrNot, несколько иной способ добиться этого

 $location = 'POINT(' . $latitude . " " . $longitude . ')'; $sql = "INSERT INTO my_geodata (location) VALUES (PointFromText(:location))"; 

Обратите внимание, что параметризация запросов не является (простой) заменой строки. В вашем коде параметр запроса помещается в строковый литерал, который будет оставаться нетронутым.

Попробуй это:

 $location = 'POINT(' . $latitude . " " . $longitude . ')'; $sql = "INSERT INTO my_geodata SET location = PointFromText(:location)"; 

Пространственные расширения еще не разработаны для широты и долготы, они предназначены для декартовых координат. Функции расстояния не учитывают кривизну Земли, поэтому всегда дают неправильные результаты. Очень грустно, что знаю …