2011-12-02 12 views
5

que tienen una consulta SQL que dice así:¿Puedo hacer una consulta parametrizada que contenga la función de geometría?

$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(); 

que han estado recibiendo este error:

'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'latlng' cannot be null'

La columna es de tipo latlngpoint NOT NULL. Dado que la inserción funciona para lo siguiente, ¿por qué se debe insertar un NULL para lo anterior?

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

Entonces, mi pregunta es, ¿puedo hacer una consulta parametrizada que contenga una función de geometría? ¿Si es así, cómo? Si no, ¿por qué?

+0

Mi conjetura sería que usted tiene que darle de comer toda la ' 'lat $, $ lon'' como un valor, pero Puedo estar equivocado –

+0

@Pekka, pero ¿por qué no funciona en el primer caso? –

+0

@Pekka, lo intenté, pero no funciona. –

Respuesta

6

En su consulta POINT(? ?) es solo una cadena, no una función. No se puede simplemente parametrizar parte de una cadena, es necesario parametrizar toda la cadena:

$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'].')'); 
Cuestiones relacionadas