我的PHP商店定位器不起作用

时间:2016-09-26 16:58:38

标签: php mysql

我构建了一个简单的商店定位器,我设置了一个自定义搜索引擎,通过名称,邮政编码等来查找商店,并且它有效。

现在,我试图按地址查找商店,并使用半正式公式返回最近的位置和距离。以下是我的代码。我哪里错了?

当我将$distance变量传递给mysqli_query()时,它告诉我它正在期待一个整数。我可能会离开。

<div class="container">
<h1>Store Locator</h1>

<div class="row">
    <div class="col-xs-6">
        <form action="" method="post">
            <label for="search">Enter Store Name</label></br>
            <input type="text" name="search" value="">
            <input name="submit" type="submit" name="address" class="btn btn-primary">
        </form>
        <?php
            if (isset($_POST['submit'])) {
                $search = $_POST['search'];
                $query = "SELECT * FROM markers WHERE zip_code LIKE '%$search%' ";
                $distance = "
                    SELECT id, 
                           (3959 * acos(cos(radians(37)) * cos(radians(lat)) * cos(radians(lng) - radians(-122)) + sin(radians(37)) * sin(radians(lat)))) 
                           AS distance 
                           FROM markers 
                           HAVING distance < 25 
                           ORDER BY distance 
                           LIMIT 0 , 20
                    ";
                $search_query = mysqli_query($connection, $query, $distance);

                if (!$search_query) {
                    die("QUERY FAILED" . mysqli_error($connection));
                } else {
                    while($row = mysqli_fetch_assoc($search_query)){
                        $name = $row['name'];
                        $address = $row['address'];
                        $city = $row['city'];
                        $state = $row['state'];
                        $zip_code = $row['zip_code'];

                        echo "<h4>$name</h4>";
                        echo "<p>$address</p>";
                        echo "<p>$city, $state, $zip_code</p></br>";
                    }
                }
            }
        ?>
    </div>
</div>

2 个答案:

答案 0 :(得分:0)

您无法在mysqli_query()内执行多个查询。

此外,函数的第三个参数不能是给定的字符串。它必须是整数。

Docs

mysqli_query ( mysqli $link , string $query [, int $resultmode = MYSQLI_STORE_RESULT ] )
  

结果模式

     

常量MYSQLI_USE_RESULT或   MYSQLI_STORE_RESULT取决于所需的行为。默认情况下,   使用MYSQLI_STORE_RESULT。

     

如果您使用MYSQLI_USE_RESULT,则所有后续调用都将返回错误   除非你调用mysqli_free_result()

,否则命令不同步      

使用MYSQLI_ASYNC(可与mysqlnd一起使用),可以执行   异步查询。然后使用mysqli_poll()来获取结果   这样的询问。

您可以运行两个mysqli_query并单独处理它们。

答案 1 :(得分:0)

正如其他人已正确说明的那样,您无法将{2}单独的查询传递给PS C:\ $string1 = '\\<a href="main\\.php\\?act=forum\\&hdl=read_\\&id=(\d+)\\&pid=313" class="small_name2"\\>Learn the powershell tool\\</a\\>' PS C:\ $string1 -match '<a href="main.php?act=forum&hdl=read_&id=83523&pid=313" class="small_name2">Learn the powershell tool</a>' False 。但是看起来你不应该执行两个查询。您可以将它们合二为一。

mysqli_query

有关此事的几件事:

如果 在指定距离内,如果它们不在同一个邮政编码中,则会将其排除在外。 (我认为这是你想要的,但我不确定为什么。)

此查询易受SQL注入攻击。您应该bind$query = "SELECT id, (big ugly formula) AS distance FROM markers WHERE zip_code LIKE '%$search%' HAVING distance < 25 ORDER BY distance LIMIT 0 , 20"; $search_query = mysqli_query($connection, $query); 连接到prepared statement,而不是将$search连接到SQL字符串中。