我构建了一个简单的商店定位器,我设置了一个自定义搜索引擎,通过名称,邮政编码等来查找商店,并且它有效。
现在,我试图按地址查找商店,并使用半正式公式返回最近的位置和距离。以下是我的代码。我哪里错了?
当我将$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>
答案 0 :(得分:0)
您无法在mysqli_query()
内执行多个查询。
此外,函数的第三个参数不能是给定的字符串。它必须是整数。
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字符串中。