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

时间:2013-08-17 00:37:31

标签: php prepared-statement

什么是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之间名称差异的原因。

2 个答案:

答案 0 :(得分:2)

有些程序员喜欢将关联数组的每个元素分配给常规变量,因此他们可以更简洁地使用它们。使用bind_result会自动为您执行此操作,并且您不必每次都通过提取循环重复此操作。

这基本上只是一种风格选择。恕我直言,bind_result的主要问题是你必须确保参数的顺序与select列表保持同步。 bind_param也是如此(这就是为什么PDO允许:name参数来解决这个问题),但其好处超过了它。

答案 1 :(得分:0)

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

get_result()可以更容易地从语句

返回预先创建的数组

bind_result()可让您轻松使用您希望使用的值。

基本上,这完全取决于开发人员喜欢使用的内容。变量或寻找数组。它们都执行相同的任务,只需使用bind_result就会删除一行代码来获取数组类型。