【问题标题】:PDO, Variable SQL Query, bindParam and LoopPDO、变量 SQL 查询、bindParam 和循环
【发布时间】:2012-05-23 00:06:18
【问题描述】:

我最近从 mysql_ 函数转移到 PDO,有些东西我不能适应我的情况。

问题是搜索查询,实际上我是这样做的:

$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 ?

如果你能给我展示一个小例子,我将不胜感激。

谢谢 ;)

【问题讨论】:

    标签: php mysql loops pdo


    【解决方案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);
    

    第一个示例中的限制也必须受到保护。

    【讨论】:

    • 谢谢,它帮助了我。但需要将 $data[] = $value 替换为 $data[] = '%'.$value.'%'
    猜你喜欢
    • 2015-03-14
    • 2023-03-11
    • 1970-01-01
    • 2015-05-31
    • 2013-08-08
    • 2011-12-27
    • 2011-04-13
    • 2019-03-02
    • 1970-01-01
    相关资源
    最近更新 更多