【发布时间】:2017-08-13 04:48:27
【问题描述】:
我在 MySQL 中有一个 users 表,想按名称搜索。现在我有以下代码:
<?php
$search = @$_GET['q'];
$search = strtoupper($search);
$search = strip_tags($search);
$search = trim($search);
$query = $con->prepare('SELECT * FROM `users` WHERE name LIKE ?');
$query->execute(array('%'.$search.'%'));
$result = $query->rowCount();
echo $result;
?>
问题是我想要多个关键字。假设有人键入“这里应该是一个好听的人名”,然后它会搜索“这里”、“应该”、“是”等,并显示“姓名”列中有单词的每一行的结果。我在网上搜索并读到可以做“OR name LIKE?”与关键字一样多,但我无法真正让它工作,我不确定它是否已经优化到大约 20 个单词(以防他们用那么多单词搜索)。如果应该使用它,您能帮我更改我的代码,以便它可以独立搜索每个单词吗?
谢谢!
编辑:
我能够通过在此线程中发布的一个人解决此问题。以下解决方案适用于我:
<?php
$search = isset($_POST['q']) ? $_POST['q'] : '';
$search = strtoupper($search);
$search = strip_tags($search);
$search = trim($search);
$split_words = explode(" ", $search);
if(count($split_words) > 0) {
$sql = "SELECT * FROM `users` WHERE ";
for($i=0 ; $i < count($split_words); $i++){
$sql .= " name LIKE ? OR";
}
$sql = substr($sql , 0, -3); //Remove last 3 characters OR with space
array_walk($split_words, "addPercentage");
$query = $con->prepare($sql);
$query->execute($split_words);
}
function addPercentage(&$value, $key) {
$value = '%'.$value.'%';
}
?>
【问题讨论】:
-
我会说将您的关键字放在一个数组中,并在循环内为每个关键字添加一个 OR 语句。有一点他们不再是真正的关键字了