2017-02-02 6 views
-1

Also ich benutze MS SQL Breite und Länge in Geographie Punkt zu speichern, in SQL ich acces, dass die Daten mit:Warum funktioniert meine SQL-Abfrage in PHP nicht?

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

Und es gut funktioniert, lat ist 20,4706622 lang ist 44,8132969 und die Lage ist einige unordentliche Hexa-Nummer.

Aber wenn ich in PHP es nicht funktioniert gleiche versuchen, es ist gleich und wird verursacht durch:

location.lat/long 

Hier ist, wie mein php sieht aus wie

<?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); 

Wenn ich ersetzen location.lat/ lang mit irgendetwas anderem wie Position, Straße, Stadt oder irgendeiner anderen Spalte wird es funktionieren. Ich weiß, es ist location.lat, aber ich weiß nicht, wie man es anders formatiert. Wenn etwas nicht klar ist, fragen Sie bitte.

+1

könnten Sie Ihre Felder umbenennen und entfernen 'location.' Sql erkennt dies, wie Sie das Feld' lat' von der Ortstabelle – davejal

+0

Lage ist einige Hexadezimalzahl, location.lat wandelt sie in Zahl, die ich brauche verwenden? Welche Felder soll ich umbenennen? –

+0

Ich frage mich auch, woher du das Feld 'Straße' hast. Ich sehe aus, als ob du mehr als einen Tisch benutzt oder du magst einfach Straßen zu deinem Tisch hinzugefügt haben. Könnten Sie alle erforderlichen Informationen hinzufügen (Tabellen, die Sie verwenden) – davejal

Antwort

0

Wenn ich richtig bin genannt Sie Ihre Felder location.Lat und location.long

Ändern Sie Ihre Feldnamen Ihrer Tabelle lat und long

dann Ihre Abfrage ändern:

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

Eine andere Option ist das Erstellen einer Ansicht, wenn Sie die db-Struktur aus irgendeinem Grund nicht ändern können.

Nach Sie diese Abfrage funktioniert:

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

Wenn Ihre Abfrage funktioniert, dann können Sie eine Ansicht erstellen von:

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

Dann PHP-Skript ändern, um die neue Ansicht, als ob es zu benutzen war ein normaler Tisch.

Sollte Ihnen eine Idee geben, was gerade passiert ist.

+0

Nein, ich habe columnlocation.lat und location.long nicht benannt, der Name der Spalte bezieht sich nur auf den Ort und den Ort, und Sie müssen location.lat und location.long eingeben, um diese Daten aus den Standorten zu extrahieren. –

+0

https://social.msdn.microsoft.com/Foren/sqlserver/de-DE/5cc4cdf3-d882-4342-9ff4-525e17fd8a3f/how-to-get-latlong-from-geography-datentyp? forum = sqlspatial nein location.lat ist nur einige abgeleitete Daten vom Standort in SQL, seine nicht neue Spalte oder Tabelle, alles aus derselben Tabelle. Überprüfen Sie dies auch https://msdn.microsoft.com/en-us/library/bb933811.aspx, wenn Sie SET @g = geography :: Point (47.65100, -122.34900, 4326) in die Tabelle einfügen, wird das Standortfeld in etwas geändert so: 0xE6100000010CD7A3703D0AD728C09A99999999B94340, die mit location.lat zu 47.65100 konvertiert werden kann. –

+0

dann Standort ist eine Microsoft SQL-Server 'Funktion', die PHP nicht weiß. Probieren Sie meine zweite Option. Erstellen Sie eine Ansicht und verwenden Sie diese Ansicht in Ihrem PHP-Skript als Tabelle – davejal

Verwandte Themen