我正在尝试使用mysqli预处理语句设置动态MySQL查询。我需要将多个值(未知数量)与单个列进行比较。
以下作品:
$qs = '?,?';
$query = 'SELECT r_id FROM sometable WHERE someindex IN ('.$qs.')';
$statement = $db_conn->prepare($query);
call_user_func_array(array($statement, 'bind_param'), array('ss', 'Something', 'somethingelse'));
我从数据库中得到了一个结果,并且可以随意返回。但是,以下不工作:
$qs = '?,?';
$query = 'SELECT r_id FROM sometable WHERE someindex IN ('.$qs.')';
$statement = $db_conn->prepare($query);
$test = array('ss', 'Something', 'something else');
call_user_func_array(array($statement, 'bind_param'), $test);
唯一不同的是分配$test
,而不是直接在call_user_func_array
内创建数组。
类似地:
$one = 'pizza';
$two = 'pie';
call_user_func_array(array($statement, 'bind_param'), array('ss', $one, $two));
也不工作。该声明甚至无法执行。
如果我不能将变量名直接放入语句中,我就无法进行动态查询。发生了什么事?有没有修复此问题,或者可能是另一种(同样简单)的方法,我可以在单个列上运行查询,具有未知数量的术语?引用或指针(即&$one
)也不起作用。
2012年或之前,call_user_func_array
似乎存在一些已知问题,但我找不到更新的内容。我使用的是PHP 5.5
编辑1
已知问题,早在2007年here