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

cra*_*gen 2 php mysql pdo

我有2个问题

我经常看到这个

    $sql->bindParam(':xxx', $yyy, PDO::PARAM_zzz);
    $sql->execute();
Run Code Online (Sandbox Code Playgroud)

为什么不使用(1)

$sql->execute(array(':xxx'=>$yyy));
Run Code Online (Sandbox Code Playgroud)

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

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

要么

    $sql->execute(array(':aaa'=>$bbb,':ccc'=>$ddd,':eee'=>$fff));
Run Code Online (Sandbox Code Playgroud)

You*_*nse 7

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

所以它适用于你问的问题.PHP用户会看到一个具有所有这种漫长而多风的bindParam方法的示例,并将其一直使用.几乎没有人会像你一样问自己一个问题,但只是继续模仿他们有一天学到的行为.
就如此容易.

有一些特殊情况下你真的需要单独的绑定,但实际上很少养成习惯.严格来说,只有我知道的一个 - 仿真打开时LIMIT calause.

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

$sql->execute(array($bbb,$ddd,$fff));
Run Code Online (Sandbox Code Playgroud)