PHP 7.x中如何将字符串数组转为含$_POST的bind_param参数?
问题
假设我有一个字符串数组:
$arr = array('prop1', 'prop2', 'prop3');
我希望使用该数组为SQL请求创建bind_param参数,数组中的每个字符串都要包含在$_POST[]中,最终需得到如下结果:
$stmt->bind_param("sss", $_POST['prop1'], $_POST['prop2'], $_POST['prop3']);
请问在PHP 7.x中能否实现这一需求?
解答
当然可以实现,PHP 7.x提供了简洁的方式处理这种动态参数传递场景,以下是两种可行方案:
方法一:使用参数展开运算符(...)
PHP 5.6及以上就支持参数展开运算符,PHP 7.x完全兼容。步骤如下:
$arr = ['prop1', 'prop2', 'prop3']; // 生成对应长度的类型字符串,每个元素对应一个's' $typeStr = str_repeat('s', count($arr)); // 收集$_POST中对应的变量(需传引用,因为bind_param要求参数为引用) $params = []; foreach ($arr as $prop) { $params[] = &$_POST[$prop]; } // 用展开运算符传递参数 $stmt->bind_param($typeStr, ...$params);
方法二:使用call_user_func_array
这是PHP早期版本就支持的方法,PHP 7.x同样适用:
$arr = ['prop1', 'prop2', 'prop3']; $typeStr = str_repeat('s', count($arr)); // 构造参数数组,第一个元素是类型字符串,后续是对应变量引用 $params = [$typeStr]; foreach ($arr as $prop) { $params[] = &$_POST[$prop]; } // 动态调用bind_param方法 call_user_func_array([$stmt, 'bind_param'], $params);
注意:两种方法都必须传递变量引用,否则bind_param会报错。另外建议提前检查$_POST中对应键是否存在,避免出现Undefined index错误。
内容的提问来源于stack exchange,提问作者koubin
相关产品推荐
相关产品推荐

