2014-02-27 3 views
0

PHP와 MySQL을 배우고 있습니다. 나는 자습서를 시도했다 :Google지도 API 매장 찾기 문제

https://developers.google.com/maps/articles/phpsqlsearch_v3?hl=en

코드에서 쿼리가 비어 돌아 오는 것 같다. 지침에 따라 데이터베이스를 설정할 때 테이블이 있습니다. 에코 호출을 사용하여 유효한 db 연결을 얻었으며 모든 변수가 올바르게 호출되고 있음을 확인했습니다. 해당 테이블에서 (즉, 수학 또는 스프린트가 없어도) 기본 db 쿼리를 실행하면 테이블에서 반환 된 행을 얻습니다. "base2.php"파일에는 튜토리얼 (dbname, 사용자 이름 및 비밀번호)에 따라 3 개의 항목 만 포함되어 있으며 이는 정확합니다. 따라서 필요한 URL 구문을 사용하여 localhost에서 페이지를로드 할 때 :

pagename.php?lat=37&lng=-122&radius=25 

xml 헤더가있는 빈 페이지 만 표시됩니다. 내가 말했던 것처럼, echo를 사용하여, 스크립트가 비어있는 것으로 반환되는 쿼리까지 도달하고 있음을 확인했습니다. 이 튜토리얼을 가지고 노는 사람이 있고 문제가 있습니까? IE11, Chrome 및 FF를 사용하여 동일한 결과를 얻습니다. 저는 WAMPserver v2.4, PHP 5.4.12, MySQL 5.6.12 및 Apache 2.4.4를 사용하고 있습니다. db의 테이블에 올바른 행과 값이 있으며 데이터가 들어 있습니다.

<?php require "base2.php"; 

// Get parameters from URL 
$center_lat = $_GET["lat"]; 
$center_lng = $_GET["lng"]; 
$radius = $_GET["radius"]; 

// Start XML file, create parent node 
$dom = new DOMDocument("1.0"); 
$node = $dom->createElement("markers"); 
$parnode = $dom->appendChild($node); 

// Opens a connection to a mySQL server 
$connection=mysql_connect ("localhost", $username, $password); 
if (!$connection) { 
    die("Not connected : " . mysql_error()); 
} 

// Set the active mySQL database 
$db_selected = mysql_select_db($database, $connection); 
if (!$db_selected) { 
    die ("Can\'t use db : " . mysql_error()); 
} 

// Search the rows in the stores table 
$query = sprintf("SELECT Name, Address, lat, lng, (3959 * acos(cos(radians('%s')) * cos( radians(lat)) * cos(radians(lng) - radians('%s')) + sin(radians('%s')) * sin(radians(lat)))) AS distance FROM stores HAVING distance < '%s' ORDER BY distance LIMIT 0 , 10", 
    mysql_real_escape_string($center_lat), 
    mysql_real_escape_string($center_lng), 
    mysql_real_escape_string($center_lat), 
    mysql_real_escape_string($radius)); 

$result = mysql_query($query); 
if (!$result) { 
    die("Invalid query: " . mysql_error()); 
} 

header("Content-type: text/xml"); 

// Iterate through the rows, adding XML nodes for each 
while ($row = @mysql_fetch_assoc($result)){ 
    $node = $dom->createElement("marker"); 
    $newnode = $parnode->appendChild($node); 
    $newnode->setAttribute("Name", $row['Name']); 
    $newnode->setAttribute("Address", $row['Address']); 
    $newnode->setAttribute("lat", $row['lat']); 
    $newnode->setAttribute("lng", $row['lng']); 
    $newnode->setAttribute("distance", $row['distance']); 
} 

echo $dom->saveXML(); 
?> 
+1

쿼리가 비어있는 경우 'HAVING' 절을 제거하려고 했습니까? 적어도 계산 한 거리가 표시됩니다. – Wrikken

+0

안녕하세요, 응답 해 주셔서 감사합니다. HAVING 절을 제거하면 실제로 모든 결과가 반환되고 distance 특성이 포함되어 XML이 만들어집니다. 그래도이게 무슨 뜻이야? – Longman

+0

그들은 멀리 떨어져 있다는 것을 의미하고 명백하게 생각합니다 ... 거리는 무엇이라고 말합니까? 또한 _numbers_를 의미하는 _strings_을 사용하지 마십시오. 'distance <'% s ''가 이상하게 보입니다. 아마도 distance <% d 또는 distance <% f가되어야합니다. – Wrikken

답변

0

이 라인 헤더 국제 ASCII의 charater ("콘텐츠 유형 : 텍스트/XML")을 고려해야한다; 이렇게하면됩니다. header ("Content-type : text/xml charset = utf-8"); xml 파일이 생성됩니다

관련 문제