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

来源:互联网 发布:查股网ddx日线数据 编辑:程序博客网 时间:2024/06/04 22:48
今天在用brophp(是lamp兄弟连里的一个框架),写程序的时候,老是报一个错误,具体情况是这样的 

Php代码  收藏代码
  1. if(emptyempty($_GET['id'])) $this->error('数据不存在');  
  2.     $c = D('news');  
  3.     $id = $_GET['id'];  
  4.     $num = $c->total();  
  5.     $page = new Page($num,10);  
  6.     $data = $c->where(array('categoryid'=>$id))->limit($page->limit)->select();    
  7.     /*问题就出在这个地方了,我加了这个where条件,它就报错,如果不加,就正常,而且在报错的时候    调试信息里打印的时候sql语句,我在phpmyadmin里执行了下,也正常,可以查到数据,也就是说sql语句是没有问题的,后来在论坛里找到了方法与原因,看下面*/  
  8.     $this->assign('p',$page->fpage());  
  9.     $this->assign('data',$data);  
  10.     //P($da);  
  11.     $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行。它的代码是 
Php代码  收藏代码
  1. call_user_func_array(array($stmt'bind_param'),$value);  

换成 
Php代码  收藏代码
  1. call_user_func_array(array($stmt'bind_param'), self::refValues($value));  

然后,在这个文件里的其它地方,添加上这段代码 
Php代码  收藏代码
  1. function refValues($arr){  
  2. if (version_compare(PHP_VERSION, '5.3.0') >= 0) {  
  3.     $refs = array();  
  4.     foreach($arr as $key => $value)  
  5.         $refs[$key] = &$arr[$key];  
  6.         return $refs;  
  7.     }  
  8.         return $arr;  
  9. }  


根据最后的这个函数,觉得这个应该和php的版本有关,所以暂时记录下吧。
1 0
原创粉丝点击