为什么我不能像这样使用“bind_param”?有没有其他方法可以在循环中使用Binding?
$insert = $this->db->prepare('INSERT INTO '.$tableName.' ('.implode($colum, ', ').') VALUES ('.implode($placeholder, ', ').'); ');
for ($i=0;$i<$count;$i++) {
$insert->bind_param($query[$i]['type'], $query[$i]['value']);
}
答案 0 :(得分:1)
嗯,您的错误非常清楚:您的$placeholder
数组不包含与$query
数组中的参数相同数量的占位符。
检查构建$placeholder
和$query
数组的代码。如果找不到问题,请在问题中添加该段代码。
好的,抱歉,我不习惯mysqli
。显然你必须在一次调用中将所有参数传递给bind_param
。这很烦人,但有一个解决方法。
call_user_func_array
函数允许您将参数作为数组传递给函数。
所以你可以:
$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);