mysqli get_result和bind_result之间的性能或安全性差异


Performance or security differences between mysqli get_result and bind_result?

php开发人员创建函数bind_result的意义何在,因为get_result似乎也很好。

if($stmt=$mysqli->prepare("SELECT member_ID FROM members where hair=? and hand=?")){
    if($stmt->bind_param('ss',$hair,$hand)){
        if($stmt->execute){
            $result=$stmt->get_result();
            while($line=$result->fetch_assoc()){
                echo $line['member_ID'];
            }
            // ------------ versus -------------------
            // $stmt->store_result();
            // $stmt->bind_result($member_ID);
            // while($stmt->fetch()){
            //  echo $member_ID;
            // }
        }
    }
}

似乎(我猜)php开发人员自己更喜欢$stmt->fetch(),因为这个函数出现得更早,但为什么是$stmt->fetch()呢?这似乎不是$row['member_ID']$member_ID变量名称差异的原因。

一些程序员喜欢将关联数组的每个元素分配给一个正则变量,这样他们就可以不那么冗长地使用它们。使用bind_result会自动为您完成此操作,并且您不必每次都在fetch循环中重复它。

这基本上只是一种风格选择。IMHO,bind_result的主要问题是必须确保参数的顺序与select列表同步。bind_param也是如此(这就是PDO允许:name参数来解决这个问题的原因),但好处大于它。

从数据库返回字符串没有安全风险(正确的验证取决于您返回的内容),

get_result()使从语句返回预先创建的数组变得更容易

bind_result()使您可以轻松地使用想要使用的值。

从本质上讲,这一切都取决于开发人员喜欢使用什么。变量或查找数组。它们都执行相同的任务,只需使用bindresult就可以占用一行代码来获取数组类型。