我在MySQL中有一個用戶表,並希望按名稱搜索。現在我有以下代碼:PHP PDO MySQL查詢LIKE - >多個關鍵字
<?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;
?>
問題是我想擁有多個關鍵字。假設有人輸入「這應該是一個人的好名字」,那麼它會搜索「這裏」,「應該」,「是」等,並顯示單詞在「名稱」列中的每一行的結果。我在網上搜索並且讀到可以做「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.'%';
}
?>
我會說你的關鍵字放在一個數組中,並在循環內爲每個關鍵字添加一個OR語句。有一點他們不再是真正的關鍵字 – 2014-10-30 18:48:47