Kia*_*oss 0 php arrays mysqli function
我有一个PHP数组,可能包含如下数据:
$data = array("Apples", "Oranges", "Grapes", "Pears");
Run Code Online (Sandbox Code Playgroud)
然后我想将这些值传递给mysqli bind_param函数.对于此示例,它将如下所示:
$stmt->bind_param("ssss", $data[0], $data[1], $data[2], $data[3]);
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果数组的长度未知,我怎样才能产生与上面相同的结果?例如,它可以是五个,十个或15个元素长.
使用PHP 5.6或更高版本:
$stmt->bind_param(str_repeat("s", count($data)), ...$data);
Run Code Online (Sandbox Code Playgroud)
使用PHP 5.5或更低版本,您可能(我确实)期望以下工作:
call_user_func_array(
array($stmt, "bind_param"),
array_merge(array(str_repeat("s", count($data))), $data));
Run Code Online (Sandbox Code Playgroud)
...但是mysqli_stmt::bind_param期望它的参数是引用,而这会传递一个值列表(感谢Barmar指出这一点).
您可以通过首先创建对原始数组的引用数组来解决此问题(尽管这是一个丑陋的解决方法).
$references_to_data = array();
foreach ($data as &$reference) { $references_to_data[] = &$reference; }
unset($reference);
call_user_func_array(
array($stmt, "bind_param"),
array_merge(array(str_repeat("s", count($data))), $references_to_data));
Run Code Online (Sandbox Code Playgroud)