Parameter 2 to mysqli_stmt::bind_param() expected to be a reference

今天在用brophp(是lamp兄弟连里的一个框架),写程序的时候,老是报一个错误,具体情况是这样的


if(empty($_GET['id'])) $this->error('数据不存在');
$c = D('news');
$id = $_GET['id'];
$num = $c->total();
$page = new Page($num,10);
$data = $c->where(array('categoryid'=>$id))->limit($page->limit)->select();
/*问题就出在这个地方了,我加了这个where条件,它就报错,如果不加,就正常,而且在报错的时候 调试信息里打印的时候sql语句,我在phpmyadmin里执行了下,也正常,可以查到数据,也就是说sql语句是没有问题的,后来在论坛里找到了方法与原因,看下面*/
$this->assign('p',$page->fpage());
$this->assign('data',$data);
//P($da);
$this->display('index/nlist');


运行时警告[在文件 H:\aphp\BroPHPTest\brophp\bases\dmysqli.class.php 中,第 75 行]:Parameter 2 to mysqli_stmt::bind_param() expected to be a reference, value given
SQL ERROR: [0] No data supplied for parameters in prepared statement

这个是它提示的错误,按照提示,找到dmysqli.class.php的75行。它的代码是

call_user_func_array(array($stmt, 'bind_param'),$value);

换成

call_user_func_array(array($stmt, 'bind_param'), self::refValues($value));

然后,在这个文件里的其它地方,添加上这段代码

function refValues($arr){
if (version_compare(PHP_VERSION, '5.3.0') >= 0) {
$refs = array();
foreach($arr as $key => $value)
$refs[$key] = &$arr[$key];
return $refs;
}
return $arr;
}


根据最后的这个函数,觉得这个应该和php的版本有关,所以暂时记录下吧。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值