使用mysqli绑定未知数量的参数

时间:2012-09-18 22:32:21

标签: php reference mysqli

我正在尝试在表格中进行搜索,例如:http://www.phpjabbers.com/free-scripts/mysql-search-table/search.php

我发现我可以根据搜索格式$ _GET连接一个字符串,这样我可以在获取参数后查询所有字符串:

$query = "SELECT * FROM table WHERE status = 1"
if($_GET['param1']{
  $query = $query." AND param1 = ?";
}
$stmt = $mysqli->prepare($query);

如果我不必添加,那将是完美的:

$stmt->bind_param('i',$_GET['art']);

我正在关注此帖子的说明:https://stackoverflow.com/a/11152781/679333,但通配符部分无效。当我将它们推入数组时,我引用了变量而不是for循环:

array_push($user_terms, &$_GET['var']);

它可以工作,但是现在我得到了一个“不推荐使用:调用时间传递引用已被弃用”警告。

我不想忽略这个警告,因为我读过Call-time pass-by-reference现在已经被PHP杀掉了。

1 个答案:

答案 0 :(得分:3)

有点草率,但完成工作。

function refValues($arr){
    if (strnatcmp(phpversion(),'5.3') >= 0) //Reference is required for PHP 5.3+
    {
        $refs = array();
        foreach($arr as $key => $value)
            $refs[$key] = &$arr[$key];
        return $refs;
    }
    return $arr;
}

$params = array();

$query = "SELECT * FROM table WHERE status = 1";

// Iterate over your paramters from $_GET
foreach ($_GET as $k => $v) 
{ 
  if(!empty($v)
  {
    $query .= " AND $k = ?";
    $params[$k] = helper::sanitize($v);
  }
}
// After you get through all your params...

$stmt = $mysqli->prepare($query);

// Bind em.
call_user_func_array(array($stmt, 'bind_param'), refValues($params));

应该这样做,尽管我以前从未与mysqli绑定过。让我知道它是如何工作的。