Php 复杂数据库搜索
我有一个sql查询,它搜索数据库以查找邮政编码20英里半径范围内的商店,但是我似乎无法让关键字搜索正常工作Php 复杂数据库搜索,php,mysql,search,Php,Mysql,Search,我有一个sql查询,它搜索数据库以查找邮政编码20英里半径范围内的商店,但是我似乎无法让关键字搜索正常工作 $search = mysqli_real_escape_string(trim($_POST['keywords'])); $sql = "SELECT *, ( 3959 * acos( cos( radians($userLat) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians($userLng) ) + sin(
$search = mysqli_real_escape_string(trim($_POST['keywords']));
$sql = "SELECT *, ( 3959 * acos( cos( radians($userLat) ) * cos( radians( lat ) )
* cos( radians( lng ) - radians($userLng) ) + sin( radians($userLat ) )
* sin( radians( lat ) ) ) ) AS distance
FROM firms
HAVING distance < 20
ORDER BY distance LIMIT 0 , 20
AND WHERE keywords
LIKE %$search%";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) { ?>
并使用参数化查询RTM:您没有正确调用它
即使是,您的查询也有语法错误:
LIKE %$search%";
^--------^---missing quotes
所以您正在生成文本SQL
SELECT ... LIKE %foo%
而不是
SELECT ... LIKE '%foo%'
您应该这段代码会发生什么?mysqli_real_escape_字符串需要连接字符串。您应该使用参数化查询。@chris85谢谢我删除了mysqli_real_escape_字符串,它是wokrd这不是我的意思。如果没有这一点,您将更容易接受SQL注入。如果你要使用这种方法,你需要正确地使用它。你需要转义或使用单引号,因为它在双引号字符串中。你不能有或在哪里,它应该是或。但为什么有人会使用_real_escape_字符串呢?!?
SELECT ... LIKE '%foo%'