1

为什么我不能像这样使用“bind_param”?有没有其他方法可以在循环中使用绑定?

$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']); 
}
4

1 回答 1

1

好吧,您的错误很清楚:您的$placeholder数组不包含与数组中的参数相同数量的占位符$query

检查构建$placeholderand$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);
于 2013-08-10T16:39:43.637 回答