首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环MySQLi "bind_param“

循环MySQLi "bind_param“
EN

Stack Overflow用户
提问于 2013-08-10 16:10:25
回答 1查看 230关注 0票数 1

为什么我不能像这样使用"bind_param“呢?是否有其他方法在循环中使用绑定?

代码语言:javascript
复制
$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']); 
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-10 16:39:43

嗯,您的错误非常清楚:您的$placeholder数组不包含与$query数组中的参数相同的占位符数。

检查构建$placeholder$query数组的代码。如果你找不到问题,把这段代码添加到你的问题中。

好的,对不起,我不习惯mysqli。显然,您必须在一个调用中将所有参数传递给bind_param。这很烦人,但有个解决办法。

call_user_func_array函数允许将参数作为数组传递给函数。

所以你可以:

  • 通过循环遍历参数来构造类型字符串;
  • 在索引0处使用该字符串创建一个数组$params,在后续索引处设置参数的值;
  • 打给call_user_func_array(array($insert, 'bind_param'), $params);

看起来是这样的:

代码语言:javascript
复制
$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);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18163786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档