Php PDO将数组循环到查询中

Php PDO将数组循环到查询中,php,Php,我有一个搜索输入,我将用户输入分解成数组(关键字) 例如web程序员->$search[0]=>web,$search[1]=>程序员 如何将数组循环到查询中进行搜索 $nums=count($search); for($n=0; $n<$nums; $n++){ $SQL=$db->prepare("SELECT * FROM post WHERE title LIKE :search_1 OR classify LIKE :search_2"); $S

我有一个搜索输入,我将用户输入分解成数组(关键字)

例如
web程序员
->
$search[0]=>web
$search[1]=>程序员

如何将数组循环到查询中进行搜索

$nums=count($search);

for($n=0; $n<$nums; $n++){
    $SQL=$db->prepare("SELECT * FROM post 
    WHERE title LIKE :search_1 OR classify LIKE :search_2");
    $SQL->bindValue(':search_1', "%".$search[$n]."%", PDO::PARAM_STR);
    $SQL->bindValue(':search_2', "%".$search[$n]."%", PDO::PARAM_STR);
    $SQL->execute();        
}

$db=NULL;
$nums=count($search);
对于($n=0;$n准备(“从post中选择*
其中标题如:search_1或分类如:search_2”);
$SQL->bindValue(':search_1',“%”,$search[$n]。“%”,PDO::PARAM_STR);
$SQL->bindValue(':search_2',“%”,$search[$n]。“%”,PDO::PARAM_STR);
$SQL->execute();
}
$db=NULL;
因此,它将从db中搜索“web”和“programmer”这两个词

bindParam//您不需要重新准备每个循环计数器,只需执行一次即可,这就是准备的全部要点!
bindParam    //you dont need to re-prepare every loop counter just do it once thats the whole point of prepare!
    $SQL=$db->prepare("SELECT * FROM post WHERE title LIKE :search_1 OR classify LIKE :search_2");
    //now loop and bind each set of vars and then execute inside the loop
    for($n=0; $n<count($search); $n++){
        $SQL->bindParam(':search_1', "%".$search[$n]."%", PDO::PARAM_STR);
        $SQL->bindParam(':search_2', "%".$search[$n]."%", PDO::PARAM_STR);
        $SQL->execute(); // you may find you need to pass the return result into an array which you can loop through afterwards or echo out the contents of each query on each count of this loop   
    }

    $db=NULL;
$SQL=$db->prepare(“从帖子中选择*标题,如:search_1或分类,如:search_2”); //现在循环并绑定每组变量,然后在循环内执行 对于($n=0;$nbindParam(':search_1',“%”,$search[$n]。“%”,PDO::PARAM_STR); $SQL->bindParam(':search_2',“%”,$search[$n]。“%”,PDO::PARAM_STR); $SQL->execute();//您可能会发现需要将返回结果传递到一个数组中,之后可以循环使用该数组,或者在每次循环计数时回显每个查询的内容 } $db=NULL;
bindParam//您不需要重新准备每个循环计数器,只需执行一次即可,这就是准备的要点!
$SQL=$db->prepare(“从帖子中选择*标题,如:search_1或分类,如:search_2”);
//现在循环并绑定每组变量,然后在循环内执行
对于($n=0;$nbindParam(':search_1',“%”,$search[$n]。“%”,PDO::PARAM_STR);
$SQL->bindParam(':search_2',“%”,$search[$n]。“%”,PDO::PARAM_STR);
$SQL->execute();//您可能会发现需要将返回结果传递到一个数组中,之后可以循环使用该数组,或者在每次循环计数时回显每个查询的内容
}
$db=NULL;
类似这样的东西:

$strSQL="SELECT * FROM post WHERE 1=1 ";
foreach ($search as $i => $value){
  $strSQL.=" AND (title LIKE :search_$i OR classify LIKE :search_clasify_$i)";
}
$SQL=$db->prepare($strSQL);

foreach ($search as $i => $value){
  $SQL->bindValue(":search_$i", "%".$value."%", PDO::PARAM_STR);
  $SQL->bindValue(":search_clasify_$i", "%".$value."%", PDO::PARAM_STR);
}

$SQL->execute();
像这样的事情:

$strSQL="SELECT * FROM post WHERE 1=1 ";
foreach ($search as $i => $value){
  $strSQL.=" AND (title LIKE :search_$i OR classify LIKE :search_clasify_$i)";
}
$SQL=$db->prepare($strSQL);

foreach ($search as $i => $value){
  $SQL->bindValue(":search_$i", "%".$value."%", PDO::PARAM_STR);
  $SQL->bindValue(":search_clasify_$i", "%".$value."%", PDO::PARAM_STR);
}

$SQL->execute();

因此,如果我循环绑定并执行,我不需要担心占位符会重复。这是行不通的,你需要根据数组中的元素数量动态构建查询,然后你还需要在循环中单独绑定每个变量。一旦你用占位符准备参数,你就可以重新执行相同的准备d查询任意次数,每次传入不同的参数(编写sql一个执行多个)这并不是OP想要的,这是一个查询和一次执行中的动态搜索词数。不确定你是如何从他的问题中得到这一点的,特别是因为他的查询与这个pdo绑定绑定在一起,使它看起来像是他想要从2个不同的列中进行选择,列1从第一个数组关键字中查看,列2从第二个数组关键字等它没有提到在单个列上对各种关键字进行动态搜索。如果你看他的查询包含两列
title
classify
,所以如果我循环绑定并执行,我不必担心占位符会重复,这是行不通的,你需要构建查询动态调用y基于数组中的元素数,之后还需要在循环中分别绑定每个变量。一旦使用占位符准备好参数,就可以重复多次执行相同的准备好的查询,每次传入不同的参数(编写sql one执行Multiple)这并不是OP想要的,这是一个查询和一次执行中的动态搜索词数。不确定你是如何从他的问题中得到这一点的,特别是因为他的查询与这个pdo绑定绑定在一起,使它看起来像是他想要从2个不同的列中进行选择,列1从第一个数组关键字中查看,列2从第二个数组关键字等,它没有提到在单个列上对各种关键字进行动态搜索。如果您查看,他的查询包含两列
标题
分类
示例3或示例2示例3或示例2