为什么在PDO中使用bindParam但不使用array()?

时间:2013-09-03 04:47:07

标签: php mysql pdo

我有2个问题

我经常看到这个

    $sql->bindParam(':xxx', $yyy, PDO::PARAM_zzz);
    $sql->execute();

为什么不使用(1)

$sql->execute(array(':xxx'=>$yyy));

如果有太多的价值我应该使用(2)

    $sql->bindParam(':aaa', $bbb, PDO::PARAM_zzz);
    $sql->bindParam(':ccc', $ddd, PDO::PARAM_zzz);
    $sql->bindParam(':eee', $fff, PDO::PARAM_zzz);
    $sql->execute();

    $sql->execute(array(':aaa'=>$bbb,':ccc'=>$ddd,':eee'=>$fff));

1 个答案:

答案 0 :(得分:7)

第一个答案非常简单。一个普通的PHP用户是一个肯定的货运崇拜程序员,他通过实例学习,而不是通过理解。这就是为什么大多数PHP代码在上个世纪的实践中具有可怕的质量。

所以问你问的问题。 PHP用户会看到一个示例,其中包含所有这些冗长而多风的bindParam方法,并将其一直使用。几乎没有人会像你一样问自己一个问题,但只是继续模仿他们有一天学到的行为。
就这么简单。

有一些例外情况,你真的需要单独的绑定,但实际上很少养成习惯。严格来说,只有我知道的一个 - LIMIT calause when emulation is turned on.

顺便说一句,我个人认为第二种方法太过冗长,并且这种方式使用它(当然还有位置占位符):

$sql->execute(array($bbb,$ddd,$fff));