2011-12-02 11 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'

latlng列がタイプpoint NOT NULLです。挿入物は以下のために働くので、なぜ上記のためにNULLが挿入されるのでしょうか?

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

私の質問は、ジオメトリ関数を含むパラメータ化されたクエリを実行できますか?もしそうなら、どうですか?そうでない場合、なぜですか?

+0

私の推測では、あなたがそれを養うために持っていることだろう全体 ' '$ LAT、$ lon''値としてではなく、私は間違っている可能性があります –

+0

@ペッカ、なぜそれは最初のケースで動作しないのですか? –

+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'].')'); 
関連する問題