2017-07-07 50 views
1

目前我有一个搜寻SEARCH_TERM_EXAMPLES句子/单词查询,它的工作原理几乎如预期,Mysql的搜索一个单词/句子,在年底PHP有额外的characteres

我有一个正则表达式expresion,搜索的名字一张桌子,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价值它得到它,但我希望能够找到Bob当我使用BobsomeLettersExtraBob something运行查询查询作为$name值 有没有办法做到这一点使用REGEXP or LIKE

回答

1
SELECT * FROM users WHERE name LIKE '%".$name."%' 

上面的查询应该足以得到的结果。您输入的数据之前,您应该验证数据表中,如果没有,请使用正则表达式以及

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

UPDATE

对不起,如果我有误解的问题,请试试这个

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

这将工作,如果我的数据库表的值是像Bobbb的东西,我会运行一个查询,如:SELECT * FROM users WHERE名称LIKE'%鲍勃%'将返回Bobbb,但我的问题是,表中的值是鲍勃和用户输入是Bobbb,感谢您的尝试 –

+0

@HeribertoJuarez soory我误解了这个问题..检查更新的答案 – pavithra

+1

谢谢你,更新后的答案非常好,谢谢你的时间和精力 –

0

你可以试试下面的查询与where子句LIKE

"SELECT * FROM users WHERE name = ".$name." OR name LIKE '%".$name."%' OR name REGEXP ^".$name."[a-zA-Z]*$" 
+0

MMM ,我测试了它,没有发现任何东西,我甚至尝试直接从phpmyadmin执行查询(显然改变变量和所有我需要改变) –

+0

@ heriberto-juarez,我更新了查询,忘了添加'OR',你可以再次测试,你能告诉我你的代码吗?如果我能帮助你。 – LuFFy

+0

当然男人,谢谢。我会编辑我的问题 –