2011-12-02 6 views
5

devo una query SQL che va come questo:Posso eseguire una query parametrizzata contenente la funzione geometria?

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

sto ottenendo questo errore:

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

La colonna latlng è di tipo point NOT NULL. Poiché l'inserto funziona per quanto segue, perché dovrebbe essere inserito uno NULL per quanto sopra?

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

Quindi, la mia domanda è, posso fare una query con parametri contenente una funzione geometria? Se é cosi, come? Se no, perché?

+0

La mia ipotesi è che si deve alimentarlo l'intero ' '$ lat, $ lon'' come un valore, ma Posso sbagliare –

+0

@Pekka, ma perché non funziona nel primo caso? –

+0

@Pekka, ho provato, ma non funziona. –

risposta

6

Nella tua domanda POINT(? ?) è solo una stringa, non una funzione. Non si può semplicemente parametrizzare parte di una stringa, è necessario parametrizzare l'intera stringa:

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