【发布时间】:2011-12-02 10:35:16
【问题描述】:
我有一个如下所示的 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();
我收到了这个错误:
带有消息“SQLSTATE[23000]”的“PDOException”:完整性约束 违规:1048 列 'latlng' 不能为空'
latlng 列的类型为 point NOT NULL。由于插入适用于以下内容,为什么会导致为上述内容插入NULL?
"INSERT INTO Places (name, latlng)
VALUES (?, GeomFromText('POINT(".$_POST['lat']." ".$_POST['lng'].")'))"
所以,我的问题是,我可以做一个包含几何函数的参数化查询吗?如果是这样,怎么做?如果不是,为什么?
【问题讨论】:
-
我的猜测是您必须将整个
'$lat, $lon'作为值提供给它,但我可能是错误的 -
@Pekka,但为什么它在第一种情况下不起作用?
-
@Pekka,我试过了,但是没用。
-
我不确定,因为我从未使用过几何函数,但我认为这里的 'POINT(? ?)' 只是一个字符串,而不是一个函数。您不能只对字符串的一部分进行参数化,您需要对整个字符串进行参数化。 dbh->prepare("INSERT INTO Places (name, latlng) VALUES (?, GeomFromText(?))"); $stmt->bindValue(1, $_POST['name']); $stmt->bindValue(2, 'POINT('.(float)$_POST['lat'].' '.(float)$_POST['lng'].')');应该工作并且应该是安全的。
-
@XzKto:是的,我认为你的解释是正确的。你的解决方案也有效。你能把它写下来作为答案,这样我就可以给你信用。谢谢:)
标签: php mysql pdo geospatial