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

Try*_*der 3 php mysql gis pdo

细节

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

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

这是我正在使用的代码。

$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();
}
Run Code Online (Sandbox Code Playgroud)

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

变化

基于 AgreeOrNot 的回答,实现这一点的一种稍微不同的方法是

$location = 'POINT(' . $latitude . " " . $longitude . ')';    
$sql = "INSERT INTO my_geodata (location) VALUES (PointFromText(:location))";
Run Code Online (Sandbox Code Playgroud)

Ing*_*son 5

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

尝试这个:

$location = 'POINT(' . $latitude . " " . $longitude . ')';
$sql = "INSERT INTO my_geodata SET location = PointFromText(:location)";
Run Code Online (Sandbox Code Playgroud)