细节
我想利用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(); }
题
我究竟做错了什么?如何使用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)";