PHP mysqli_stmt 的 bindparam问题

13 篇文章 0 订阅
11 篇文章 0 订阅

在使用 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了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值