我有一个使用 PHP 和 MySQL 管理兴趣点的网站。我决定研究 MySQL 的空间数据功能,而不是将坐标保存在两个单独的字段中。
我设法使用以下方法将数据插入数据库:
// Update new records
$query = "UPDATE users SET users_address = :uaddress, users_placeid = :uplace, users_coords = POINTFROMTEXT(:location) ";
$query .= "WHERE users_id = :uid ";
// echo "Query: $query <br>";
$stmt = $conn->prepare($query);
$stmt->execute(array(':uaddress' => $users_address,
':uplace' => $users_placeid,
':location' => $location,
':uid' => $users_id));
$result = $stmt;
现在我想使用 PHP 和 PDO 读取数据并获取坐标。网上好像没有使用PDO、PHP、MySQL处理空间数据的例子。
我的正常选择代码是:
$stmt = $conn->prepare("SELECT * FROM users WHERE users_id = :uid ");
$stmt->execute(array(':uid' => $users_id));
$result = $stmt;
if ($result->rowCount() > 0) {
foreach($result as $row) {
$users_address = $row['users_address'];
$users_placeid = $row['users_placeid'];
$users_lat = $row['x.users_coords'];
echo "Lat: $users_lat <br>";
}
}
我尝试了各种选项,但每个选项都会出错。上面的代码返回:
Notice: Undefined index: x.users_coords
如果可能的话,我想坚持使用 SELECT * 而不是 SELECT users_address 等。
另一个选项是返回使用两个字段作为坐标,但这使得以后进行距离测量等变得更加困难。
知道如何提取纬度和经度吗?
最佳答案
经过一番折腾,我终于解决了这个问题。您必须在 SELECT 字符串中指定空间数据,然后才能轻松读取数据。以下是读取数据的完整代码:
$stmt = $conn->prepare("SELECT *, X(users_coords) AS users_lat, Y(users_coords) AS users_long FROM users WHERE users_id = :uid ");
$stmt->execute(array(':uid' => $users_id));
$result = $stmt;
if ($result->rowCount() > 0) {
foreach($result as $row) {
$users_address = $row['users_address'];
$users_placeid = $row['users_placeid'];
$users_lat = $row['users_lat'];
// echo "Lat: $users_lat <br>";
$users_long = $row['users_long'];
// echo "Long: $users_long <br>";
}
}
?>
关于php - 使用 PHP 从 MySQL 读取空间数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29052181/