0

嗨,我对 PHP 相对较新,对谷歌地图 API 也很新,但我想从我的 mysql 数据库中检索数据并将其发布到我的谷歌地图上,问题是我需要在数据库 A 中搜索相关数据,提取一个 'id ' 从每个条目中搜索数据库 B 中提取的所有 id,最后使用从数据库 B 中提取的数据在谷歌地图上放置标记(数据库 B 保存 'id' 以与数据库 A 对应的纬度字段和经度字段)。我希望在阅读我的代码后所有这些都有意义:

<?PHP
    $min = $_POST['min'];
    $result = mysqli_query($con,"SELECT * FROM A WHERE x>".$min);
    while($row = mysqli_fetch_array($result))
    {
        $host=$row['host_id'];
        $result1 = mysqli_query($con,"SELECT * FROM B WHERE host_id=".$host);
        while($row1 = mysqli_fetch_array($result1));
        {
            $lat2=$row1['latitude'];
            $lon2=$row1['longitude'];
            echo  'var myLatLng = new google.maps.LatLng('.$lat2.','.$lon2.');';
            echo  'var aMarker = new google.maps.Marker({';
            echo      'position: myLatLng,';
            echo      'map: map,';
            echo  '});';
        }
    } 
?>

正如我所说,我对 PHP 很陌生,所以对于我在哪里出错的任何帮助将不胜感激谢谢:)

4

1 回答 1

0

您可以同时连接到两个不同的数据库。使用您正在使用的 mysqli_ 扩展:

<?php

$db1 = mysqli_connect('localhost',$username1,$password1);
mysqli_select_db($db1, $database1) or die( "Unable to select database 1");

$db2 = mysqli_connect('localhost',$username2,$password2);
mysqli_select_db($db2, $database2) or die( "Unable to select database 2");

?>

然后,您可以选择其中一个$db1$db2根据需要进行选择。

<?php
$min = (int) $_POST['min'];
$result = mysqli_query($db1,"SELECT * FROM A WHERE x>".$min);

while($row = mysqli_fetch_array($result))
{
    $host=$row['host_id'];
    $result1 = mysqli_query($db2,"SELECT * FROM B WHERE host_id=".$host);

    while($row1 = mysqli_fetch_array($result1));
    {
        //...
    }
}
?>

我添加了一个(int)来清理你的$_POST['min']变量——这对于防止 SQL 注入很重要。对于字符串,您应该使用 进行调查mysqli_real_escape_string(),甚至更好地使用参数化查询:如何防止 PHP 中的 SQL 注入?

更新 对于同一数据库中的表,我建议重新配置您的代码以使用单个 SQL 语句,并将JOIN表放在一起。就像是:

<?php

$sql = "
SELECT B.latitude, B.longitude
FROM B
INNER JOIN A ON (A.host_id = B.host_id)
WHERE A.x > {$min}
";

?>

这会从 B 获取所有记录,这些记录的 host_id 与 A 中的任何 host_id 匹配,且 x 的值大于 $min。如果您在 A 中有多个具有相同 host_id 的记录,您将得到重复,因此您可以添加一个GROUP BY子句来减少这些记录,无论是在 host_id 上,还是在表 B 的主键上,如果这不是 host_id:

...
WHERE A.x > {$min}
GROUP BY B.host_id

此外,可能值得检查 SQL 是否有错误并显示警告:

<?php

$result1 = mysqli_query($con,$sql);
if($result1===FALSE)
{
    $sql_error = mysqli_error($con);
    $js_safe_sql_error = json_encode(utf8_encode($sql_error));
    echo "alert('Database Error: ' + " . $js_safe_sql_error . ");\n";
}
else
{
    while($row1 = mysqli_fetch_array($result1));
    {
        //...
    }
}

?>

我注意到您在评论中说地图完全消失了。这将表明生成的 javascript 中有错误。希望您的浏览器的 javascript 控制台会显示此错误。当我运行它时,我得到:ReferenceError: map is not defined,但这可能是在您的代码中的其他地方定义的?

于 2013-10-22T18:08:01.637 回答