SQL Wildecard Query in PHP


SQL Wildecard Query in PHP

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

这是代码:

首先,我接受输入,对其进行消毒,然后在左右添加%标志。

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

然后我运行查询:

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

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

改用"喜欢"

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

这更像是一个SQL问题而不是PHP问题,但我相信你需要的是WHERE子句的LIKE比较。

因此,请将查询更改为:...WHERE restaurant_name LIKE '$restaurantName'");

LIKE将根据通配符(%)字符的位置匹配部分字符串。

所以有几件事需要注意,首先要回应其他人所说的话——你应该在查询中使用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一起使用,以获得您想要的结果,而不是=