php – params数组MySQLi的动态绑定

我正在为我的网站构建搜索功能,用户可以使用3个参数进行搜索.用户可以选择输入全部3来过滤表或根本不输入并接收整个表.我想出了如何动态构建查询取决于用户输入的内容,但我无法使用正确数量的参数和正确的顺序调用bind_params().

码:

$sql = "SELECT position, rank, fullname, phonenumber, email, division 
FROM `table` WHERE 1=1 ";


if(!empty($_POST['fname'])){
   $firstname = $_POST['fname'];
   $sql .= " AND `fullname` LIKE '%?%'";
}


if($_POST['div'] !== "All"){
   $division = $_POST['div'];
   $sql .= " AND `division` LIKE '%?%'";
}


if(!empty($_POST['pos'])){
   $position = $_POST['pos'];
   $sql .= " AND `position` LIKE '%?%'";
}


$stmnt = $db->prepare($sql);
$stmnt -> bind_param('sss', $firstname, $division, $position); 
$stmnt -> bind_result($position, $rank, $fullname, $phonenumber, $email,$division);
$stmnt -> execute();

我总是得到这个错误:变量的数量与准备好的语句中的参数数量不匹配我理解为什么我得到它但我尝试了多个但没有解决的问题.任何提示或文档链接都是有用的.谢谢

最佳答案 您可以将数据和参数作为数组传递:

$data = array();
$format = array();

if(!empty($_POST['fname'])){
    $firstname = $_POST['fname'];
    $sql .= " AND `fullname` LIKE '%?%'";
    $format[] = 's';
    $data[] = $firstname;
}

然后通过引用传递它们并使用call_user_func_array绑定

if(!empty($format) && !empty($data)):

            $format = implode( '', $format );
            $format = str_replace( '%', '', $format );

            array_unshift( $data, $format );
            call_user_func_array( array( $stmnt , 'bind_param' ), (referenceValues( $data ) );

        endif;

通过引用函数传递:

public function referenceValues($array)
    {
        $refs = array();

        foreach ($array as $key => $value):

            $refs[$key] = &$array[$key];

        endforeach;

        return $refs; 
    }
点赞