Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql搜索在PHP结尾有额外字符的单词/句子_Php_Mysql_Regex_Pattern Matching - Fatal编程技术网

Mysql搜索在PHP结尾有额外字符的单词/句子

Mysql搜索在PHP结尾有额外字符的单词/句子,php,mysql,regex,pattern-matching,Php,Mysql,Regex,Pattern Matching,目前我有一个搜索句子/单词的查询,它的效果几乎与预期一样 我有一个正则表达式,可以在表中搜索名称,expample: function getNames($str){ $stmt = "SELECT * FROM users WHERE name = :name OR name REGEXP :reg1 OR name REGEXP :reg

目前我有一个搜索句子/单词的查询,它的效果几乎与预期一样

我有一个正则表达式,可以在表中搜索名称,expample:

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
值运行查询,它会得到它,但我希望在使用
bobsomeletsextra
Bob something
作为
$name
值运行查询时能够找到
Bob

有没有一种方法可以使用
REGEXP或类似的方法来实现这一点

您可以在下面尝试使用
where
子句查询
LIKE

"SELECT * FROM users WHERE name = ".$name." OR name LIKE '%".$name."%' OR name REGEXP ^".$name."[a-zA-Z]*$"
上面的查询应该足以得到结果。在向表中输入数据之前,您应该验证数据。如果没有,请同时使用正则表达式

"SELECT * FROM users WHERE name LIKE '%".$name."%' AND REGEXP ^".$name."[a-zA-Z]*$"
更新

对不起,如果我误解了这个问题,请尝试这个

"Select * from users  WHERE '".$name."' LIKE CONCAT(name , '%')" 

嗯,我对它进行了测试,但没有发现任何结果,我甚至尝试直接从phpmyadmin执行查询(显然是在更改变量和所有需要更改的内容)@heriberto juarez,我更新了查询,忘记添加
,您可以再次测试,也可以显示您的代码吗?如果我能帮你的话。@HeribertoJuarez,你想要多少个字符作为第一个字符?例如,按前3个字符搜索等。。。我也在寻找。。一旦我找到它,就告诉你。如果我的数据库表值类似于Bobb,那么这会起作用,我会运行如下查询:SELECT*FROM users,其中名称类似“%Bob%”将返回Bobb,但我的问题是表中的值是Bob,用户输入是Bobb,无论如何,谢谢你的帮助try@HeribertoJuarez很快我误解了这个问题。。检查更新的答案谢谢,更新的答案非常好,非常感谢你的时间和关注
"Select * from users  WHERE '".$name."' LIKE CONCAT(name , '%')"