目前我有一个搜索句子/单词的查询,它几乎按预期工作,
我有一个在表中搜索名称的正则表达式,例如:
function getNames($str){
$stmt = "SELECT * FROM users WHERE name = :name
OR name REGEXP :reg1
OR name REGEXP :reg2
OR name LIKE :lik1";
$query = self::$connection->prepare($stmt);
$query->execute(array(":name"=>$str,
":reg1"=>"^$str" . "[a-zA-Z\s]*$",
":reg2"=>"^[a-zA-Z]*[\s]*[$str][a-zA-Z]"
":lik1"=>"%" . $str . "%"
));
return $query->fetchAll(PDO::FETCH_ASSOC);
}
假设我的表包含以下值
- 鲍勃
- 彼得
- 马克
- 大卫
- 约翰
如果我使用 Bob
作为 $name
值运行我的查询,它会得到它,但我希望能够找到 Bob
当我使用 BobsomeLettersExtra
或 Bob something
作为 $name
值运行查询
有没有办法使用 REGEXP 或 LIKE
来做到这一点?
最佳答案
SELECT * FROM users WHERE name LIKE '%".$name."%'
上面的查询应该足以得到结果。您应该在向表中输入数据之前验证数据,否则请使用正则表达式
"SELECT * FROM users WHERE name LIKE '%".$name."%' AND REGEXP ^".$name."[a-zA-Z]*$"
更新
对不起,如果我误解了这个问题,请试试这个
"Select * from users WHERE '".$name."' LIKE CONCAT(name , '%')"
关于php - Mysql 查找末尾有多余字符的词/句 PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44963061/