如何使用 php pdo 搜索多个输入和复选框?

How to search multiple inputs and checkboxes with php pdo?

我有一个包含多个“文本”输入的搜索表单,我正在尝试向其中添加复选框。添加复选框后,我得到以下信息:

ERROR: Array to String Conversion

<form action='s-response.php method='get'>
<div class='cusname'><input type='text' name='cusname' class='EdtTxt' /></div>
<div class='street'><input type='text' name='street' class='EdtTxt' /></div>

复选框

<?php while ($row=$query->fetch()){?>
    <input type='checkbox' name='groupid[]' value='<?php echo $row['id'];?>'><?php echo $row['title'];?><?php }?>

响应页

$wheres = array();
$params = array();
/* Find all Sent fields, If the field is Not Empty, add the field to the SQL query */
if (!empty($_GET['cosname'])) { $wheres[] = 'c.cname LIKE :cosname'; $params[':cosname'] = '%'.$_GET['cosname'].'%'; }
if (!empty($_GET['street'])) { $wheres[] = 'a.street LIKE :street'; $params[':street'] = '%'.$_GET['street'].'%'; }

复选框部分

if(!empty($_GET['groupid'])) {

foreach($_GET['groupid'] as $value){
    $wheres[] = 'g.groupid = :groupid'; $params[':groupid'] = $_GET['groupid'];
}}

查询部分

/* Create the Start and End (static) parts of the query */
$q1="SELECT c.fname,a.street FROM customers c LEFT JOIN cus_address a ON c.id=a.custid WHERE c.act=1";
$q3=" GROUP BY c.id";
/* Create the Middle (dynamic) part of the query */
if (!empty($wheres)) { $q1 .= " AND " . implode(' AND ', $wheres); }
/* Combine into one query and execute */
$sql=$q1.$q3;
$query=$con->prepare($sql);
$query->execute($params);

知道导致错误的原因吗?

查询部分

if(!empty($_GET['groupid'])) {

    foreach($_GET['groupid'] as $i => $value){
        $placeholder = sprintf(':groupid%d', $i+1);
        $wheres[] = sprintf('g.groupid = %s', $placeholder); 
        $params[$placeholder] = $value;
    }
}

在 foreach 循环中,您应该使用 $value,而不是 $_GET['groupid'] - 它是一个数组,还记得吗?您目前正在对其进行迭代。

我编辑了我的答案以展示如何处理多个组 ID。占位符是唯一的,例如。 :groupid1, :groupid2, :groupid3.