2012-05-15 97 views
1

我最近從mysql_函數移到了PDO,並且有些東西我無法適應我的情況。PDO,變量SQL查詢,bindParam和循環

的問題是搜索查詢,其實我做這樣的:

$resultat = $DB->prepare('SELECT * FROM `posts` WHERE `title` LIKE :searchterm OR `tags` LIKE :searchterm LIMIT '.$debut.', '.NB_ART); 
$resultat->bindParam(':searchterm',$searchterm); 
$resultat->execute(); 

知道該查詢的大小可以變化取決於用戶的搜索,我怎麼可以做這樣的事情:

$tab = explode(' ',$searchterm); 
$query = 'SELECT * FROM posts WHERE '; 

foreach($tab as $value){ 
    if(strlen($value)>2){ 
     $query .= ' (`title` LIKE "%'.$value.'%" OR `tags` LIKE "%'.$value.'%") AND'; 
    } 
} 
$query = substr($query,0,-3); 
$query .= 'ORDER BY `date` DESC'; 

// And how can i do the bindParam() here ? 

如果您能向我展示一個小例子,我將不勝感激。

感謝)在第一實施例

回答

1
$data = array(); 
$arr_query = array(); 

$tab = explode(' ',$searchterm); 
$query = 'SELECT * FROM posts WHERE '; 

foreach($tab as $value){ 
    if(strlen($value)>2){ 
     // sry for that, but i think implode() better 
     $arr_query[] = '(`title` LIKE ? OR `tags` LIKE ?)'; 

     $data[] = '%'. $value .'%'; 
     $data[] = '%'. $value .'%'; 
    } 
} 
$query .= implode(' AND', $arr_query); 
$query .= ' ORDER BY `date` DESC'; 

$res = $pdo->prepare($query); 
$res->execute($data); 

限制也必須被保護。

+0

謝謝,它幫助了我。但需要用$ data [] ='%'。$ value替換$ data [] = $ value。'%' – Piokaz

+0

是的,你說得對,修正了。 – ShaaD