2017-02-02 114 views
-1

于是我就用MS SQL存储在地理点的纬度和经度,在SQL我存取权限的数据有:为什么我的SQL查询在PHP中不起作用?

SELECT 
    location.Lat AS lat, 
    location.long AS long, 
    location 
    FROM tableName; 

而且它的工作好,LAT是20,4706622长44,8132969和位置是一些杂乱的十六进制数。

但当我在PHP中尝试同样是行不通的,这是相同的,并且是造成:

location.lat/long 

,这里是我的PHP看起来像

<?php 
session_start(); 

include "connect.php"; 

$query = $handler->query("SELECT location.lat AS lat, street FROM shops"); 
$row = $query->fetch(PDO::FETCH_OBJ); 
$location[0] = $row->lat; 
$location[1] = $row->street; 
echo json_encode($location); 

如果我更换location.lat/与其他任何地点,街道,城市或任何其他列将工作。 我知道这取决于location.lat,但我不知道如何格式化它的不同。 如果有任何不清楚的地方,请询问。

+1

你能重命名你的领域,并删除'location.' Sql认识到这一点,因为你想使用位置表中的'lat'字段 – davejal

+0

位置是一些十六进制数,location.lat将它转换为我需要的数字?你想让我重命名哪些字段? –

+0

我也想知道你从哪里得到了这个领域的'街道'。我看起来像你使用多于一张桌子,或者你只是神奇地将街道添加到你的桌子。您可以添加所有必需的信息(您正在使用的表格) – davejal

回答

0

如果我纠正你命名你的领域location.Latlocation.long

更改你的表你的字段名latlong

然后将查询更改为:

SELECT 
    Lat AS lat, 
    long AS long, 
    location 
    FROM tableName; 

另一种选择是创建视图,如果由于某种原因无法更改数据库结构。

根据你这个查询工作:

SELECT 
    location.Lat AS lat, 
    location.long AS long, 
    location 
    FROM tableName; 

如果您的查询工作,那么你可以创建一个视图:

create view new_table_name as 
SELECT location.Lat AS lat, location.long AS long, location FROM tableName; 

然后改变你的PHP脚本,以使用新的观点,就好像它是一个正常的桌子。

Select * from new_table_name 

应该给你一个想法刚刚发生了什么。

+0

不,我没有命名columnlocation.lat和location.long,列的名称只是位置和位置,而您需要输入location.lat和location.long以从位置提取数据。 –

+0

https://social.msdn.microsoft。com/Forums/sqlserver/en-US/5cc4cdf3-d882-4342-9ff4-525e17fd8a3f/how-to-get-latlong-from-geography-data-type?forum = sqlspatial no location.lat只是来自位置的一些派生数据在SQL中,它不是新的列或表,它全部来自同一张表。当你将SET @g = geography :: Point(47.65100,-122.34900,4326)添加到表格中时,也可以查看https://msdn.microsoft.com/en-us/library/bb933811.aspx它将位置字段变为像这样:0xE6100000010CD7A3703D0AD728C09A99999999B94340可以使用location.lat转换为47.65100。 –

+0

然后位置是一个微软的SQL服务器'功能',PHP不知道。试试我的第二个选项。创建一个视图,并在你的php脚本中使用该视图作为表格 – davejal

相关问题