php - PDO bindParam 与执行

标签 php pdo

我经常看到使用 bindParam 的代码或 bindValue与 PDO。只是将参数传递给 execute因任何原因而皱眉?

我了解 bindParam实际上绑定(bind)到变量,您可以设置绑定(bind)的参数类型bind方法,但是如果你只是插入字符串呢?

$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'));

它没有那么冗长和直观,让输入一起“进入”查询对我来说更有意义。但是,我几乎没有看到它被使用过。

是否有理由更喜欢 bind将参数传递给 execute 的方法当您不必利用前者的特殊行为时?

最佳答案

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

如需了解更多信息,请参阅 bindParam documentation , bindValue documentationexecute documentation .

例如

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

bindValue 并将数组传递给 execute 的行为方式与此时固定参数值并相应地执行 SQL 的方式大致相同。

按照上面的相同示例,但使用 bindValue

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

当直接在 execute 中传递值时,所有值都被视为字符串(即使提供了整数值)。因此,如果您需要强制执行数据类型,则应始终使用 bindValuebindParam

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

关于php - PDO bindParam 与执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12392424/

相关文章:

php - 为什么稍后关闭查询 ")"?

php - elasticsearch查询帮助-找不到文档

php - 当 mysql 时间戳 > 20 分钟时删除的时间戳比较

php - 准备好的语句不适用于 ALTER 表查询

mysql - 在sql子查询中访问变量

php - PDO 不适用于端口

mysql - pdo 是否转义语句?

php - 如何在不测试 protected 方法时达到 100% 的代码覆盖率

php - Laravel 可选的 WHERE 子句

php - 使用 laravel Eloquent 关系检索除 NULL 之外的所有记录