2017-05-10 57 views
0

就像我的標題說的,我想在搜索欄中搜索1個或多個詞。我希望能夠搜索(整個搜索,第一個詞,第二個詞或第三個詞)。我做到這一點我可以做到這一點,如果$ searchArray [0],$ searchArray [1]和$ searchArray [2]被定義。問題是我不能搜索超過3個字。這裏是我的代碼:我想在搜索欄中搜索多個詞

if(isset($_GET['search']) AND !empty($_GET['search']) AND $_GET['search'] != ' '){ 
$search = htmlspecialchars($_GET['search']); 
$searchArray = explode(' ',$search); 
var_dump($searchArray); 

$totalVideosReq = $stdb->query('SELECT id FROM videos WHERE title LIKE "%'.$search.'%" OR title LIKE "%'.$searchArray[0].'%" OR title LIKE "%'.$searchArray[1].'%"'); 
$totalVideos = $totalVideosReq->rowcount(); 
$totalPages = ceil($totalVideos/$videosPerPage); 
$videos = $stdb->query('SELECT id, title, videoTime FROM videos WHERE title LIKE "%'.$search.'%" OR title LIKE "%'.$searchArray[0].'%" OR title LIKE "%'.$searchArray[1].'%" ORDER BY id DESC limit '.$start.','.$videosPerPage); 



$currentPage = 1; 
if(isset($_GET['page']) AND !empty($_GET['page']) AND $_GET['page'] > 0 AND $_GET['page'] <= $totalPages){ 
$_GET['page'] = intval($_GET['page']); 
$currentPage = $_GET['page']; 
}else{ 
    $currentPage = 1; 
}} 

,如果你們知道我可以使它甚至通過搜索3個字的組合:第一,將是巨大的更好。先謝謝你 !

+0

構建查詢動態,還可以使用參數化查詢,這是開放的SQL注入。 (htmlspecialchars可能阻礙XSS注入,它對SQL注入沒有影響)。 – chris85

+0

我想我想通了!你需要使用:mysql_real_escape_string,但你是否也需要htmlspecialchar? –

+0

你正在使用'mysql_ *'嗎?參數化查詢是保護SQL注入安全的最佳方法。變量不在查詢中,您讓驅動程序轉義並引用它們。 – chris85

回答

0

這可能做的伎倆

$query = 'SELECT id FROM videos WHERE title LIKE "%'.$search.'%"' 
foreach ($searchArray as $s) { 
    $query .= ' OR title LIKE "%'.$s.'%"'; 
} 
$totalVideosReq = $stdb->query($query); 
0

您可以使用implode()動態生成的查詢,而不是硬編碼的。

$totalVideosReq = $stdb->query('SELECT id FROM videos WHERE title LIKE "%'.$search.'%" OR title LIKE "%'.implode("\" OR title LIKE \"%", $searchArray).'%"'); 

這是很容易受到SQL注入的方式,你需要防止這種情況。

+0

非常感謝您的回答!你知道我怎麼可以從SQL注入安全我的代碼? –

+0

準備好的陳述和消毒用戶輸入,在互聯網上的許多指南(甚至在SO上)。 – Enstage

0

請嘗試下面的代碼,

if(count($searchArray) > 0) { 
    $query = 'SELECT id FROM videos WHERE '; 
    $cond = array(); 
    foreach ($searchArray as $s) { 
     $cond[] = ' title LIKE "%'.$s.'%"'; 
    } 
    $cond = implode(' OR ', $cond); 

    //this is your query to get total videos 
    $totalVideosReq = $stdb->query($query.$cond); 

    //this is your query to fetch videos 
    $videos = $stdb->query($query.$cond.' ORDER BY id DESC limit '.$start.','.$videosPerPage); 
}