PDO循环数组进入查询[重复]

Posted

技术标签:

【中文标题】PDO循环数组进入查询[重复]【英文标题】:PDO loop array into query [duplicate] 【发布时间】:2013-06-08 18:54:24 【问题描述】:

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

例如。 web programmer -> $search[0]=>web, $search[1]=>programmer

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

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

所以它会从 db 中搜索 'web' 和 'programmer' 这两个词

【问题讨论】:

php.net/manual/en/pdostatement.execute.php 示例 3 或示例 2 【参考方案1】:
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 一次执行多次) 这不符合 OP 的要求,即在单个查询和单个执行中搜索词的动态数量。 不确定你是如何从他的问题中得到的,特别是因为他的查询与这个 pdo 绑定相关,这使得他看起来想从 2 个不同的列中进行选择,其中第一个列从第一个数组关键字和列中查找2 从第二个数组关键字等它没有提到对单个列上的各种关键字进行动态搜索。如果您查看他的查询包含 2 列 titleclassify【参考方案2】:

类似这样的:

$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();

【讨论】:

以上是关于PDO循环数组进入查询[重复]的主要内容,如果未能解决你的问题,请参考以下文章

带有 PDO::FETCH_ASSOC 的 foreach 循环,提供的参数无效

循环结果不正确

PHP数组不会填充mysql数据[重复]

PDO - 对多个 foreach 循环使用相同的查询

如何在for-each循环中使用async-await? [重复]

php中foreach循环遍历二维数组