首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用未知数量的参数创建预准备语句?(用于搜索框)

如何使用未知数量的参数创建预准备语句?(用于搜索框)
EN

Stack Overflow用户
提问于 2012-05-19 20:09:14
回答 2查看 468关注 0票数 2

我有这个foreach循环,我将其用于搜索功能:

代码语言:javascript
复制
$keywords=$_GET['keyword']; 
$exploded=explode(' ',trim($keywords));
$mysql_command="SELECT * FROM items WHERE completed='1' AND ";

foreach ($exploded as $key => $value){
    if ($key>0)
        $mysql_command.=' OR ';

    $mysql_command.="title LIKE ? OR description LIKE ?";
        }

我想使用这个准备好的语句:

代码语言:javascript
复制
$stmt=$cxn->prepare($mysql_command);
$stmt->execute(array("%$value%","%$value%"));

问题是,我不知道会有多少关键词。那么,如何使用未知数量的关键字创建预准备语句呢?

在此之前非常感谢。问候

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-19 20:19:43

为什么不在请求后创建数组,如下所示:

代码语言:javascript
复制
$params=Array();
foreach($exploded as $key => $value){
  $params[]="%$value%";
}
$stmt->execute($params);
票数 3
EN

Stack Overflow用户

发布于 2014-02-05 08:30:44

mysqli不允许使用数组直接调用executebind_param。您必须对此使用call_user_func_array,如下所示:

代码语言:javascript
复制
call_user_func_array(array($stmt, "bind_param"), array("s", "%test%"));

然后,要构建数组,您可以使用以下命令:

代码语言:javascript
复制
class BindParam{
    private $v = array("");

    public function add( $type, &$value ){
        $this->v[0] .= $type;
        $this->v[] = &$value;
    }

    public function get(){
        return $this->v;
    }
} 

这是这个http://php.net/manual/en/mysqli-stmt.bind-param.php#109256的一个微调版本。然后像这样使用它:

代码语言:javascript
复制
$searchTerms = explode(' ', $filter);
$searchTermBits = array();
foreach ($searchTerms as $term) {
    $term = trim($term);
    if (!empty($term)) {
        $searchTermBits[] = "title LIKE ?";
        $a = '%'.$term.'%';
        $bindParam->add('s', $a); // can't pass by value
    }
}
$filter_sql = "WHERE " . implode(' AND ', $searchTermBits);

/*...*/

call_user_func_array(array($stmt, "bind_param"), $bindParam->get());
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10665047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档