Php 函数返回引用完整的数组?-MySQLi绑定参数

Php 函数返回引用完整的数组?-MySQLi绑定参数,php,reference,mysqli,Php,Reference,Mysqli,我一直在使用MySQLi,并且在很大程度上发现它非常有用,但在动态查询方面,bind_param()会失败。反正我用 call_user_func_array(array($stmt, 'bind_param'), $array_of_params); 这使我能够绕过这个问题,我的代码运行良好。但是这有点混乱,因为我有各种if语句来确定参数的$array,类似这样的 if($switch=="coreSkill_only"){ $array_of_params[0]=

我一直在使用MySQLi,并且在很大程度上发现它非常有用,但在动态查询方面,bind_param()会失败。反正我用

call_user_func_array(array($stmt, 'bind_param'), $array_of_params); 
这使我能够绕过这个问题,我的代码运行良好。但是这有点混乱,因为我有各种if语句来确定参数的$array,类似这样的

if($switch=="coreSkill_only"){
            $array_of_params[0]='s';
            $array_of_params[1]=&$coreSkill;

        }else if($switch=="region_only"){
            $array_of_params[0]='s';
            $array_of_params[1]=&$region;

        }else if($switch=="coreSkill_region"){
            $array_of_params[0]='si';
            $array_of_params[1]=&$coreSkill;
            $array_of_params[2]=&$region;
        }
因此,我决定像这样将所有条件的东西都粘贴到它自己的方法中,而不是将处理实际查询执行的方法弄乱

function &generateQueryDropDowns($coreSkill,$region){

$queryDetails=array();

$query="select id,title,location,salary,employer,image from jobs where";
$switch="";
$and=0;

$array_of_params=array();

if($coreSkill!="Any"){
    $query.=" coreSkill=?";
    $and=1;
    $override=1;
    $switch="coreSkill_only";
    $array_of_params[0]='s';
    $array_of_params[1]=&$coreSkill;
}
if($region!="Any"){
        if($and==1){
            $query.=" and";
            $switch="coreSkill_region";
            $array_of_params[0]='si';
            $array_of_params[1]=&$coreSkill;
            $array_of_params[2]=&$region;
        }else{
            $switch="region_only";
            $array_of_params[0]='s';
            $array_of_params[1]=&$region;
        }
    $query.=" region=?";
    $override=1;
}

$queryDetails['query']=$query;
$queryDetails['switch']=$switch;
$queryDetails['override']=$override;
$queryDetails['bind_params']=$array_of_params;


return $queryDetails;
}
我从最初的方法中这样调用它

$foo = &$this->generateQueryDropDowns($coreSkill,$region);
$query=$foo['query'];
$switch=$foo['switch'];
$override=$foo['override'];
$array_of_params=$foo['bind_params'];

if($stmt = $connection->prepare($query)) {
call_user_func_array(array($stmt, 'bind_param'), $array_of_params);
etc....
但是我得到了以下关于引用的错误

  PHP Warning:  Parameter 2 to mysqli_stmt::bind_param() expected to be a reference

据我所知,我做的一切都是正确的,以保持返回数组中的引用完好无损


欢迎提供任何建议。

结果表明,您也需要将参数作为引用传递

所以

变成

function &generateQueryDropDowns(&$coreSkill,&$region){}

这是我推荐PDO_mysql而不是mysql的主要原因。mysqliapi在很多方面都是荒谬的。但是,如果内存可用,则需要执行
$array\u of_params=&$foo['bind_params'],原因我还不完全清楚。检查和顶部检查我听说PDO在很多方面都更好,有一天当我有时间玩它时,我肯定我会移动。$array_of_params=&$foo['bind_params';仍然给出相同的错误:S
function &generateQueryDropDowns(&$coreSkill,&$region){}