我有以下两个查询,第一个查询从用户输入的上一页中获取(已发布)邮政编码,并在邮政编码数据库中找到相应的lat和lon。第二个查询应该获取该数据并按距离在100英里范围内排序。
它不起作用,虽然网页加载正常,但我没有返回任何结果,即使我尝试在数据库中添加邮政编码。谁能看到我做错了什么?
$colname_LOCATION = "-1";
if (isset($_POST['ZIPCODE'])) {
$colname_LOCATION = $_POST['ZIPCODE']; //Zip code taken from customer form on previous page
}
mysql_select_db($database_XMASTREE, $XMASTREE); // find lat and lon from fields inZIP_FULL zipcode database
$query_LOCATION = sprintf("SELECT * FROM ZIP_FULL WHERE zip_code = %s", GetSQLValueString($colname_LOCATION, "int"));
$LOCATION = mysql_query($query_LOCATION, $XMASTREE) or die(mysql_error());
$row_LOCATION = mysql_fetch_assoc($LOCATION);
$totalRows_LOCATION = mysql_num_rows($LOCATION);
$lat = $row_LOCATION['latitude']; // code said to change $lat with a number so hopefully this will do it
$lon = $row_LOCATION['longitude']; // code said to change $lon with a number so hopefully this will do it
mysql_select_db($database_XMASTREE, $XMASTREE);
$query_DIST = "SELECT ((ACOS(SIN($lat * PI() / 180) * SIN(lat * PI() / 180) + COS($lat * PI() / 180) * COS(lat * PI() / 180) * COS(($lon - lon) * PI() / 180)) * 180 / PI()) * 60 * 1.1515) AS distance
FROM MEMBERS
HAVING distance <= 100
ORDER BY distance ASC";
$DIST = mysql_query($query_DIST, $XMASTREE) or die(mysql_error());
$row_DIST = mysql_fetch_assoc($DIST);
$totalRows_DIST = mysql_num_rows($DIST);
答案 0 :(得分:0)
我修改了上周刚创建的代码,应该按照您的意愿行事。 你的MySQL代码一目了然。
$colname_LOCATION = "-1";
if (isset($_POST['ZIPCODE'])) {
$colname_LOCATION = $_POST['ZIPCODE']; //Zip code taken from customer form on previous page
}
try {
$pdo = new PDO("$dbInfo[type]:host=$dbInfo[host];dbname=$dbInfo[dbname]", $dbInfo['username'], $dbInfo['password']);
$query_LOCATION = "SELECT * FROM ZIP_FULL WHERE zip_code = :zip_code";
$stmt->bindParam(':zip_code', $colname_LOCATION, PDO::PARAM_INT);
$stmt->execute();
$row_LOCATION = $stmt->fetch(PDO::FETCH_ASSOC);
$lat = $row_LOCATION['latitude'];
$lon = $row_LOCATION['longitude'];
$bounding_distance = 10; //$bounding_distance is an easy way to narrow down the search, without MySQL doing all of the distance calcs
$sql = "SELECT *
,((ACOS(SIN(:find_lat * PI() / 180) * SIN(`lat` * PI() / 180) + COS(:find_lat * PI() / 180) * COS(`lat` * PI() / 180) * COS((:find_long - `lon`) * PI() / 180)) * 180 / PI()) * 60 * 1.15078) AS `distance`
FROM `MEMBERS`
WHERE
`lat` BETWEEN (:find_lat - :bounding_distance) AND (:find_lat + :bounding_distance)
AND `lon` BETWEEN (:find_long - :bounding_distance) AND (:find_long + :bounding_distance)
AND `distance` <= 100
ORDER BY `distance` ASC;";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':find_lat', $lat);
$stmt->bindValue(':find_long', $lon);
$stmt->bindValue(':bounding_distance', $bounding_distance);
$stmt->execute();
$row_DIST = $stmt->fetchAll(PDO::FETCH_ASSOC);
$totalRows_DIST = count($row_DIST);
$pdo = NULL;
}
catch(PDOException $e) {
pdo_error($e,$sql);
}