2017-02-02 22 views
-1

Поэтому я использую MS SQL для хранения широты и долготы в точке географии, в SQL я Acces, что данные с:Почему мой SQL-запрос не работает в PHP?

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

И работать хорошо, лат является 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.Lat и location.long

Изменение названия полей вашей таблицы в lat и long

Затем измените запрос:

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

Другой вариант - создать представление, если по какой-то причине вы не можете изменить структуру db.

Согласно вам этот запрос работает:

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/Форумы/sqlserver/en-US/5cc4cdf3-d882-4342-9ff4-525e17fd8a3f/how-to-get-latlong-from-geography-data-type? forum = sqlspatial no location.lat - это всего лишь некоторые производные данные из местоположения в sql, его не новый столбец или стол, его все из одной таблицы. Проверьте это также https://msdn.microsoft.com/en-us/library/bb933811.aspx, когда вы добавляете SET @g = geography :: Point (47.65100, -122.34900, 4326) в таблицу, которая превращает поле местоположения в нечто например: 0xE6100000010CD7A3703D0AD728C09A99999999B94340, который может быть преобразован с использованием location.lat в 47.65100. –

+0

, тогда местоположение - это '' '' '' '' '' 'сервер Microsoft SQL, который php не знает. Попробуйте мой второй вариант. Создайте представление и используйте это представление в своем php-скрипте в виде таблицы – davejal