gpt4 book ai didi

PHP PDO MySQL 查询 LIKE -> 多个关键字

转载 作者:行者123 更新时间:2023-11-29 15:59:26 25 4
gpt4 key购买 nike

我在 MySQL 中有一个用户表,想要按名称搜索。现在我有以下代码:

<?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;
?>

问题是我想要有多个关键字。假设有人输入“这里应该是一个人的好名字”,然后它会搜索“这里”、“应该”、"is"等,并显示“名称”列中包含单词的每一行的结果。我在网上搜索并了解到可以执行“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.'%';
}
?>

最佳答案

您不应该使用 @ 来消除错误,这是一种不好的做法,请检查该值是否已设置。下面的示例应该可以工作,但结果可能并不那么相关。

$search = isset($_GET['q']) ? $_GET['q'] : ''; 
$search = strtoupper($search);
$search = strip_tags($search);
$search = trim($search);
$words = explode(' ', $search);
$words_condition = array();
$arguments = array();
foreach ($words as $word) {
$words_condition[] = 'name LIKE ?';
$arguments[] = '%'.$word.'%';
}

$query = $con->prepare('SELECT * FROM `users` WHERE '.implode(' OR ', $words_condition));
$query->execute($arguments);

$result = $query->rowCount();
echo $result;

关于PHP PDO MySQL 查询 LIKE -> 多个关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56302861/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com