Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 复杂数据库搜索_Php_Mysql_Search - Fatal编程技术网

Php 复杂数据库搜索

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(

我有一个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( 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%'