В настоящее время я пишу бэкэнд-сервис для своих приложений для Android, и, поскольку это не моя специальность, я не понимаю, почему я получил эту ошибку.
Цель состоит в том, чтобы сохранить список координат местоположения в данных геометрии в моей базе данных из моих приложений. Сначала я просто использую mysql_query для связи с моей базой данных, но затем я узнаю об «инъекциях sql», поэтому я преобразовываю весь свой код в PDO.
Вот мой код с mysql_query:
$submitRoute = mysql_query("INSERT INTO route(id, route) VALUES('$id', ST_GeomFromText('LINESTRING($route)'))");
На этом этапе я успешно отправляю, а также извлекаю и отображаю маршруты, которые я отправил. Но когда я изменил его на стиль PDO, все работает нормально, за исключением того, что в этом запросе я получил «http error 500».
Вот мой код в стиле PDO:
$submitRoute = $conn->prepare("INSERT INTO route(id, route) VALUES(:id, :route");
$result = $submitRoute->execute(array(
':id' => $_POST['id'],
':route' => ST_GeomFromText('LINESTRING($_POST['route'])'))
));
Я также попробовал:
$submitRoute = $conn->prepare("INSERT INTO route(id, route) VALUES(:id, :route");
$result = $submitRoute->execute(array(
':id' => $_POST['id'],
':route' => ST_GeomFromText('LINESTRING(' . $_POST['route'] . ')'))
));
И это потому, что я подумал, что, возможно, ST_GeomFromText работает только внутри строки запроса:
$submitRoute = $conn->prepare("INSERT INTO route(id, route) VALUES(:id, ST_GeomFromText('LINESTRING(:route)'))");
$result = $submitRoute->execute(array(
':id' => $_POST['id'],
':route' => $_POST['route']
));
Но последние 2 заканчиваются в ловушке исключения ошибки. Может кто-нибудь сказать мне, где я сделал это неправильно? Спасибо
Вот как это работает для меня:
$query = "INSERT INTO geo (`id`, `gps_coordinates`) VALUES (:id, ST_GeomFromText(:point))";
$values = [
':id' => 5,
':point' => 'POINT(' . $lat . ' ' . $lng . ')'
];
Других решений пока нет …