2012-05-15 158 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