<转>PHP mysqli_stmt 的 bindparam问题

在使用 mysqli_stmt 相关预处理SQL的方法时,调用bind_param会报一个参数不足的错误。可以采用如下方式解决,假设你有一个这样的封装:

Php代码  收藏代码
  1. function execute_stmt($sql_str , $params=array()){  
  2.     $stmt = mysqli_stmt_prepare($link_id, $sql_str);  
  3.     if ( $stmt ){  
  4.         foreach($params as $k=>$v){  
  5.             $array[] = &$params[$k]; //注意此处的引用  
  6.         }  
  7.         call_user_func_array(array($stmt, 'bind_param'), $array); // 魔术方法直接call  
  8.         $stmt->execute();  
  9.         ...  
  10.         // 若干方法  
  11.     }  
  12. }  

 由于PHP手册上写到,这个方法是传递可变长度的参数表,因此直接传递数组的话会使其误解为单一参数。

另外,传递的$params 至少像这样写才成:

Php代码  收藏代码
  1. $params = array(  
  2.     'ids',            // 第一个参数为参数表类型串, 其中 i:整型 d:双精度 s:表示字符串 b:BLOG  
  3.     1000,  
  4.     200.00,  
  5.     'string value'  
  6. );  

 如此这般,就可以使用PHP的预处理SQL了。

posted on 2015-11-12 14:34  hahahahahai12  阅读(222)  评论(0)    收藏  举报

导航