返回基于二维数组内容的mysql查询

时间:2015-04-07 19:13:08

标签: php mysql arrays loops

让我在前面加上一个解释:

我正在开展一个小型项目,在Google地图中我在城市周围放置了一个未确定的半径。我在mysql数据库中有一个表,其中包含所有城市及其lat和lng坐标(绘制圆圈时需要)。

对于此应用的用户,我已将其设置为所以他们需要做的是按以下格式添加城市和州:city_st

一个字符串将包含所有需要的城市: $ parseLocations =“sioux city_ia,alabaster_al,boise_id,atlanta_ga”;

我的问题是,虽然它适用于该字符串中的第一项,但其他任何一项都不会从数据库中提取,即使在我看来我拥有的$ sql变量正在请求正确的信息。这是一个循环,所以我很困惑为什么第一个项目工作正常,但其他人都没有。

感谢您的帮助

<?PHP

$user = 'root';
$password = 'password';
$db = 'interactionDesign';
$host = 'localhost';
$port = 8889;
$conn = (mysqli_connect($host, $user, $password, $db));
if (!$conn) {
    die("Connection failed. " . mysqli_connect_error());
}
echo "Connected successfully." . "<p>";


// break out the string of locations
$parseLocations = "sioux city_ia, alabaster_al, boise_id, atlanta_ga";
$locations = explode(',', $parseLocations);


// break city_st into separate array values, add to 2 dim array
for ($x = 0; $x < count($locations); $x++) {
    $point[$x] = explode('_', $locations[$x]);
}


//loop through 2 dim array, echo values
for ($l_row = 0; $l_row < count($point); $l_row++) {

    for ($l_col = 0; $l_col < 2; $l_col++) {
        echo $l_row . " " . $l_col . " " . $point[$l_row][$l_col] . "<BR>";
    }



    $city = $point[$l_row][0];
    $state = $point[$l_row][1];
    $sql = "SELECT lat, lng, city, state FROM zipCodes WHERE city=\"$city\" and state_abb=\"$state\"";

    $result = mysqli_query($conn, $sql);

    print_r($conn);
    echo "<p>";
    print_r($sql);
    echo"<BR>";

    $row = mysqli_fetch_assoc($result);

    echo "<P>" . $row["city"] . ", " . $row["state"] . ": " . $row["lat"] . " " . $row["lng"] . "     <--- From Database" . "<p>";



}

?>

2 个答案:

答案 0 :(得分:0)

我猜主要的问题是你的逗号分隔字符串中有空格。

此:

$parseLocations = "sioux city_ia, alabaster_al, boise_id, atlanta_ga";

explode()将:

array("sioux city_ia", " alabaster_al"," boise_id", " atlanta_ga")

请注意除数组中第一项之外的所有内容的空格。

如果你这样做:

$parseLocations = "sioux city_ia,alabaster_al,boise_id,atlanta_ga";

你应该得到你期望的数组值。

现在说,我不知道为什么,如果你开始用硬编码城市/州的价值,你就不会硬编码成可用的数组,如:

$locations = array(
    array('city' => 'some value', 'state' => 'some other value'),
    ...
);

并保存所有爆炸和其他字符串操作以获得可行的数据结构。

答案 1 :(得分:0)

如果我理解正确,用户应该输入用逗号(,)分隔的所有地方。因此,用户可以输入变量$parseLocations,如果用户输入了大量空格(逗号之前或之后),您仍希望它能够正常工作。

请尝试这个:

for ($x = 0; $x < count($locations); $x++) {
    $point[$x] = explode('_', trim($locations[$x]));
}