使用PHP从MySQL读取空间数据

时间:2015-03-14 17:49:10

标签: php mysql pdo

我有一个网站,使用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用于空间数据的例子。

我的普通SELECT代码是:

$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>";

  } 
}

我尝试了各种选项,每个选项都会出错。上面的代码返回:

  

注意:未定义的索引:x.users_coords

如果可能,我想坚持使用SELECT *而不是SELECT users_address等。

另一种选择是返回使用两个字段作为坐标,但这使得以后进行距离测量变得更加困难。

知道如何提取纬度和经度吗?

1 个答案:

答案 0 :(得分:0)

经过多次挫折后,我设法解决了这个问题。您必须在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>";
  } 
}

?>