好吧,您的错误很清楚:您的$placeholder
数组不包含与数组中的参数相同数量的占位符$query
。
检查构建$placeholder
and$query
数组的代码。如果您找不到问题,请在您的问题中添加那段代码。
好吧,对不起,我不习惯mysqli
。显然,您必须在一次调用中将所有参数传递给bind_param
. 这很烦人,但有一个解决方法。
该call_user_func_array
函数允许您将参数作为数组传递给函数。
这样你就可以:
- 通过参数循环构造类型字符串;
- 在索引 0 处使用该字符串创建一个数组
$params
,并在后续索引处创建参数值;
- 打电话
call_user_func_array(array($insert, 'bind_param'), $params);
。
看起来像这样:
$insert = $this->db->prepare('INSERT INTO '.$tableName.' ('.implode($colum, ', ').') VALUES ('.implode($placeholder, ', ').'); ');
$values = array();
for ($i=0 ; $i<$count ; $i++) {
$types .= $query[$i]['type']; // this needs to be one single character from [idsb]
$values[] = $query[$i]['value'];
}
$params = array_merge(array($types), $values);
call_user_func_array(array($insert, 'bind_param'), $params);