我正在尝试创建一个餐馆搜索,即使用户只输入整个名称的一部分,也会在数据库中找到该餐馆。
以下是代码:
首先,我接受输入,清理它,然后向左右添加%
个标志。
$restaurantNameTest = InputCleaner($_GET["restaurantName"]);
$restaurantName = ('%' . $restaurantNameTest . '%');
然后我运行查询:
$result = mysqli_query($conn,
"SELECT restaurantID,restaurant_name, cusine, wait_time
FROM Restaurant
WHERE restaurant_name = '$restaurantName'");
由于某种原因,这不起作用,除非我完全输入名称,否则找不到结果。我做错了吗?
答案 0 :(得分:2)
使用Like代替
$result = mysqli_query($conn,
"SELECT restaurantID,restaurant_name, cusine, wait_time
FROM Restaurant
WHERE restaurant_name LIKE '$restaurantName'");
答案 1 :(得分:1)
这更像是一个SQL问题,而不是PHP问题,但我认为你需要的是WHERE子句的LIKE comparison。
因此,请将您的查询更改为:...WHERE restaurant_name LIKE '$restaurantName'");
LIKE
将根据通配符(%
)字符的位置匹配部分字符串。
答案 2 :(得分:1)
有几点要注意,首先要回应其他人所说的 - 你应该在查询中使用LIKE
。最重要的是,您应该使用MySQLi的prepared statements
所以你希望你的代码看起来像这样:
$sql = "SELECT restaurantID,
restaurant_name,
cusine,
wait_time
FROM Restaurant
WHERE restaurant_name LIKE '%?%'";
$query = $connection->prepare($sql);
$query->bind_param('s'. $restaurantName);
$query->execute();
我主要是PDO
用户,因此您可能需要仔细检查上述语法,但它应该有用。
专门针对您的问题重新讨论:
LIKE
与wildcards
一起使用,以获得您所追求的结果,而不是=
。