В настоящее время я кодирую бэкэнд-сервис для своих приложений для Android, и поскольку это не моя специальность, я смущен, почему я получил эту ошибку.
Цель состоит в том, чтобы сохранить список координат местоположения в геометрии данных в моей базе данных из моих приложений. Сначала я просто использую mysql_query для связи с моей базой данных, но затем я узнаю о "SQL-инъекциях", поэтому я конвертирую весь свой код в PDO.
Вот мой код с mysql_query:
$submitRoute = mysql_query("INSERT INTO route(id, route) VALUES('$id', ST_GeomFromText('LINESTRING($route)'))");
На этом этапе я успешно отправляю, а также получаю и показываю маршруты, которые я отправил. Но когда я изменил его на стиль PDO, все работает отлично, за исключением этого запроса, я получил "http-ошибка 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 заканчиваются ошибкой catch. Может ли кто-нибудь сказать мне, где я сделал это неправильно? Спасибо
Вот как это работает для меня:
$query = "INSERT INTO geo ('id', 'gps_coordinates') VALUES (:id, ST_GeomFromText(:point))";
$values = [
':id' => 5,
':point' => 'POINT(' . $lat . ' ' . $lng . ')'
];