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了。

你可能感兴趣的:(PHP mysqli_stmt 的 bindparam问题)