<转>PHP mysqli_stmt 的 bindparam问题
在使用 mysqli_stmt 相关预处理SQL的方法时,调用bind_param会报一个参数不足的错误。可以采用如下方式解决,假设你有一个这样的封装:
- function execute_stmt($sql_str , $params=array()){
- $stmt = mysqli_stmt_prepare($link_id, $sql_str);
- if ( $stmt ){
- foreach($params as $k=>$v){
- $array[] = &$params[$k]; //注意此处的引用
- }
- call_user_func_array(array($stmt, 'bind_param'), $array); // 魔术方法直接call
- $stmt->execute();
- ...
- // 若干方法
- }
- }
由于PHP手册上写到,这个方法是传递可变长度的参数表,因此直接传递数组的话会使其误解为单一参数。
另外,传递的$params 至少像这样写才成:
- $params = array(
- 'ids', // 第一个参数为参数表类型串, 其中 i:整型 d:双精度 s:表示字符串 b:BLOG
- 1000,
- 200.00,
- 'string value'
- );
如此这般,就可以使用PHP的预处理SQL了。
posted on 2015-11-12 14:34 hahahahahai12 阅读(222) 评论(0) 收藏 举报
浙公网安备 33010602011771号