2011-12-02 38 views
5

我有一個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' with message 'SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'latlng' cannot be null'

latlngpoint NOT NULL類型。由於插入工作爲以下,爲什麼會導致上述插入NULL

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

所以,我的問題是,我可以做一個包含幾何函數的參數化查詢嗎?如果是這樣,怎麼樣?如果不是,爲什麼?

+0

我的猜測是,你必須給它整個''$緯度,$ lon''作爲一種價值,但我可能是錯誤的 –

+0

@Pekka,但爲什麼它不起作用的第一種情況? –

+0

@Pekka,我試過了,但它不起作用。 –

回答

6

在您的查詢中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'].')'); 
相關問題