Php 如何使用PDO bindParam将点数据插入mysql?

Php 如何使用PDO bindParam将点数据插入mysql?,php,mysql,pdo,gis,Php,Mysql,Pdo,Gis,详细信息 我想利用mysql的空间扩展,所以我尝试使用bindParam将经度和纬度存储在数据类型为POINT的mysql表中。 不幸的是,我一直收到错误SQLSTATE[23000]:完整性约束冲突:1048列“location”不能为null 我已经检查过经度和纬度是否有值。所以问题在于我的代码,但我看不出我做错了什么 这是我正在使用的代码 $location=$latitude." ".$longitude; $sql = "INSERT INTO my_geodata SET locat

详细信息

我想利用mysql的空间扩展,所以我尝试使用bindParam将经度和纬度存储在数据类型为POINT的mysql表中。 不幸的是,我一直收到错误SQLSTATE[23000]:完整性约束冲突:1048列“location”不能为null

我已经检查过经度和纬度是否有值。所以问题在于我的代码,但我看不出我做错了什么

这是我正在使用的代码

$location=$latitude." ".$longitude;
$sql = "INSERT INTO my_geodata SET location = PointFromText('POINT(:location)')";
      //INSERT INTO my_geodata SET location = PointFromText('POINT(-41 12)');    

try 
{
    $stmt = $dbh->prepare($sql);            
    $stmt->bindParam(':location', $location, PDO::PARAM_STR);           
    $stmt->execute();   
    $dbh = null;
}

catch(PDOException $e)
{               
    echo $error=$e->getMessage();
}
问题

我做错了什么?如何使用PDO和bindParam将经度和纬度插入mysql表(使用POINT数据类型)

变化

根据AgreeOrNot的回答,实现这一点的另一个稍微不同的方法是

$location = 'POINT(' . $latitude . " " . $longitude . ')';    
$sql = "INSERT INTO my_geodata (location) VALUES (PointFromText(:location))";

请注意,参数化查询不是(简单的)字符串替换。在您的代码中,您的查询参数被放入一个字符串文本中,该文本将保持不变

试试这个:

$location = 'POINT(' . $latitude . " " . $longitude . ')';
$sql = "INSERT INTO my_geodata SET location = PointFromText(:location)";

空间扩展还不是为纬度和经度设计的,它们是为笛卡尔坐标设计的。距离函数没有考虑地球的曲率,所以总是给出错误的结果。很遗憾,我知道…

插入与注释输出代码一起工作吗?是的,插入可以工作。您是否尝试过使用准备好的语句来代替注释输出代码?而不是:?不,我没有那样做。区别是什么?绑定值而不是参数?是的,值得一试如果只是为了消除,它需要一点时间来测试。将bla插入bla,其中bla=?sql->bindValue(1,坐标);值得注意的是,将
PointFromText()
放入变量与将其放入查询不同。