PHP中的SQL Wildecard查询

时间:2016-04-22 14:46:28

标签: php sql

我正在尝试创建一个餐馆搜索,即使用户只输入整个名称的一部分,也会在数据库中找到该餐馆。

以下是代码:

首先,我接受输入,清理它,然后向左右添加%个标志。

$restaurantNameTest = InputCleaner($_GET["restaurantName"]);
$restaurantName = ('%' . $restaurantNameTest . '%');

然后我运行查询:

$result = mysqli_query($conn, 
"SELECT restaurantID,restaurant_name, cusine, wait_time
FROM Restaurant
WHERE restaurant_name = '$restaurantName'");

由于某种原因,这不起作用,除非我完全输入名称,否则找不到结果。我做错了吗?

3 个答案:

答案 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用户,因此您可能需要仔细检查上述语法,但它应该有用。

专门针对您的问题重新讨论:

  • LIKEwildcards一起使用,以获得您所追求的结果,而不是=