Могу ли я сделать параметризованный запрос, содержащий функцию геометрии? - PullRequest
5 голосов
/ 02 декабря 2011

У меня есть SQL-запрос, который выглядит так:

$stmt = $dbh->prepare("INSERT INTO Places (name, latlng)
 VALUES (?, GeomFromText('POINT(? ?)'))");
$stmt->bindValue(1, $_POST['name']);
$stmt->bindValue(2, $_POST['lat']);
$stmt->bindValue(3, $_POST['lng']);
$stmt->execute();

Я получаю эту ошибку:

«PDOException» с сообщением «SQLSTATE [23000]: ограничение целостности нарушение: 1048 Столбец 'latlng' не может быть нулевым '

Столбец latlng имеет тип point NOT NULL. Поскольку вставка работает для следующего, почему она вызывает вставку NULL для вышеприведенного?

"INSERT INTO Places (name, latlng)
 VALUES (?, GeomFromText('POINT(".$_POST['lat']." ".$_POST['lng'].")'))"

Итак, мой вопрос: могу ли я выполнить параметризованный запрос, содержащий функцию геометрии? Если так, то как? Если нет, то почему?

1 Ответ

6 голосов
/ 02 декабря 2011

В вашем запросе POINT(? ?) это просто строка, а не функция. Вы не можете просто параметризовать часть строки, вам нужно параметризовать всю строку:

$stmt = dbh->prepare("INSERT INTO Places (name, latlng) VALUES (?, GeomFromText(?))");
$stmt->bindValue(1, $_POST['name']);
$stmt->bindValue(2, 'POINT('.(float)$_POST['lat'].' '.(float)$_POST['lng'].')');
...