【问题标题】:Attempting to search a MySQL database in PHP with PDO尝试使用 PDO 在 PHP 中搜索 MySQL 数据库
【发布时间】:2016-11-19 11:59:10
【问题描述】:

我试图在搜索中找到类似于查询的结果,例如,当有人搜索“tes”时,我希望出现“Test McTestFace”。

我尝试使用 LIKE 和 MATCH AGAINST 方法,但似乎都不起作用。使用 MATCH AGAINST 时,什么都不会出现,而使用 LIKE 时,只会出现直接匹配。

我的 MATCH AGAINST 代码:

if (isset($_POST['submit']))
{
    $query = $db->prepare("SELECT * FROM accounts WHERE MATCH (name) AGAINST (:query)");
    $query->execute(array('query' => $_POST['query']));
    $result = $query->fetch();
}
print_r($result);

我的 LIKE 代码:

if (isset($_POST['submit']))
{
    $query = $db->prepare("SELECT * FROM accounts WHERE name LIKE :query");
    $query->execute(array('query' => $_POST['query']));
    $result = $query->fetch();
}
print_r($result);

对不起,谢谢。

【问题讨论】:

  • 我不明白你想要达到什么目的。你会考虑提出一个简洁的问题吗?
  • @Bex 抱歉,您觉得它不够简洁,(虽然现在已经回答)我试图询问如何正确使用 MySQL 查询的 LIKE(或 MATCH AGAINST)值。出于特定原因,我正在尝试制作一个简单的搜索表单,允许输入一个关闭字符串并接收匹配的列表或用户。

标签: php mysql search pdo


【解决方案1】:

如果使用LIKE,您需要使用通配符% 包装查询以使其工作。

来自docs

使用 LIKE,您可以在模式中使用以下两个通配符:

% 匹配任意数量的字符,甚至是零个字符。

_ 只匹配一个字符。

$query->execute(array('query' => '%' . $_POST['query'] . '%'));

【讨论】:

  • 是否可以根据结果的相似程度进行排序?
  • 可能最简单的方法是ORDER BY name
【解决方案2】:

要匹配通配符,您需要使用'%'.$_POST['query'].'%'。 (LIKE)。

【讨论】:

  • 把它给另一个,它更完整,因此更好。
猜你喜欢
  • 1970-01-01
  • 2016-10-16
  • 1970-01-01
  • 2017-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-26
  • 2011-03-21
相关资源
最近更新 更多