我得到了以下代码,但它似乎没有得到lat和long的正确值。它给了我0,000000作为回报。当我查看地址时,它会在json中为我提供正确的值。
mysql_select_db($dbname);
$result = mysql_query("SELECT id, street, postalcode, place, lat, lng FROM stores") or die(mysql_error());
while($row = mysql_fetch_array( $result )){
$addressbar = $row['street']." ".$row['postalcode']." ".$row['place'];
$address = urlencode($addressbar);
$json = file_get_contents("http://maps.googleapis.com/maps/api/geocode/json?address=$address&sensor=true");
$decoded = json_decode($json);
$lat = $decoded->results[0]->geometry->location->lat;
$lng = $decoded->results[0]->geometry->location->lng;
mysql_query("UPDATE stores SET lat='$lat', lng='$lng' WHERE id=".$row['id']."") or die(mysql_error());
printf( $addressbar."%d\n", mysql_affected_rows());
echo "<br/><br/>";
}
我似乎无法找到我做错的事。我希望任何人都可以帮助我。
答案 0 :(得分:2)
一些事情!要进行调试,我会执行以下操作:
我打印出$ json,如果你从地图api得到0,你可能会在$ json文本中看到错误信息。如果你在$ json中得到lat / lng,那么在你的mysql查询中添加更多的调试,或者在它进入exec函数之前打印出查询。例如,添加更多调试:
DBI->connect( $dsn, $username, $password, { 'PrintError' => 1 } )
如果它不在$ json中,那么我会手动转到地图api网址以查看我的回复
我确信您信任Google提供的数据,但在进行任何查询时请养成使用占位符的习惯。占位符(?)而不是直接将变量放在SQL代码中可以保护您免受SQL注入。例如:
$mysqlquery = $dbh->prepare( 'UPDATE stores SET lat=?, lng=? WHERE id=?' );
$mysqlquery->execute( $lat, $lng, $row['id'] );
有时候我在调试打印出要发送给API的内容时会有所帮助。不是将URL或查询直接发送到函数,而是将其放入变量中,将该变量打印出来,然后将变量发送到函数/ api。您可能认为它是正确的,但是一些小问题阻止它工作,如果您看到字符串就很明显。
希望这一切都有所帮助,祝你好运!
答案 1 :(得分:1)
Google查询代码和JSON解码是正确的;我自己尝试过,如果地址检查(我试过的那个),它会正确地发出lat和lng。
尝试打印查询并检查从客户端手动执行它。
我遇到的唯一可能性是:
不的其他可能性来找我:
我也投票支持艾伦霍尔曼的建议。