我经常看到使用 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 documentation和 execute 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
中传递值时,所有值都被视为字符串(即使提供了整数值)。因此,如果您需要强制执行数据类型,则应始终使用 bindValue
或 bindParam
。
我认为您可能会看到 bind*
比 execute(array)
使用得更多,因为许多人认为在参数声明中显式定义数据类型是更好的编码实践。
关于php - PDO bindParam 与执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12392424/