PDO 绑定参数与执行

2022-08-30 09:24:39

我经常看到使用或与PDO一起使用的代码。只是出于任何原因而放弃论点吗?bindParambindValueexecute

我知道它实际上绑定到变量,并且您可以使用这两种方法设置绑定的参数类型,但是如果您只插入字符串怎么办?bindParambind

$query = "SELECT col1 FROM t1 WHERE col2 = :col2 AND col3 = :col3 AND col4 = :col4";
$pdo->bindValue(':col2', 'col2');
$pdo->bindValue(':col3', 'col3');
$pdo->bindValue(':col4', 'col4');

我经常看到上述内容,但就我个人而言,我更喜欢:

$pdo->execute(array(':col2' => 'col2', ':col3' => 'col3', ':col4' => 'col4'));

它不那么冗长,从视觉上讲,将输入“进入”查询放在一起更有意义。但是,我几乎从未见过它被使用过。

当您不必利用前者的特殊行为时,是否有理由更喜欢这些方法而不是传递参数?bindexecute


答案 1

当您只想将变量引用绑定到查询中的参数,但可能仍需要对其进行一些操作并且只想在执行查询时计算变量的值时,可能会发现使用了。它还允许您执行更复杂的操作,例如将参数绑定到存储过程调用,并将返回的值更新到绑定变量中。bindParam

有关详细信息,请参阅 bindParam 文档bindValue 文档和执行文档

例如

$col1 = 'some_value';
$pdo->bindParam(':col1', $col1);
$col1 = 'some_other_value';
$pdo->execute(); // would use 'some_other_value' for ':col1' parameter

bindValue并传递一个数组,使其行为方式与参数值在该点固定并相应地执行SQL的方式大致相同。execute

遵循上面的相同示例,但使用bindValue

$col1 = 'some_value';
$pdo->bindValue(':col1', $col1);
$col1 = 'some_other_value';
$pdo->execute(); // would use 'some_value' for ':col1' parameter

直接在中传递值时,所有值都被视为字符串(即使提供了整数值)。因此,如果需要强制实施数据类型,应始终使用 或 。executebindValuebindParam

我认为您可能会看到使用得更多,因为许多人认为在参数声明中显式定义数据类型是更好的编码实践。bind*execute(array)


答案 2

通过将参数与方法一起传递,将数组中的所有值都传递给带有函数的语句。$pdo->execute()PDO::PARAM_STR$pdo->bindParam()

我现在可以看到的主要区别在于,使用该函数,您可以使用 PHP.net 手册中描述的PDO::P ARAM_*常量来定义传递的数据类型$pdo->bindParam()


推荐