2017-07-07 67 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

當然男人,謝謝。我會編輯我的問題 –