我经常看到使用bindParam或bindValue使用PDO的代码.是否只是execute因为任何原因而不屑一顾?
我理解bindParam实际上绑定到变量,你可以设置与两种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?
Mik*_*ant 61
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并且传递一个数组的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)许多人认为更好的编码实践来在参数声明中明确定义数据类型.
通过将参数与$pdo->execute()方法一起传递,可以传递数组中的所有值,以及PDO::PARAM_STR具有该$pdo->bindParam()函数的语句.
我现在可以看到的主要区别是,使用该$pdo->bindParam()函数,您可以使用PHP.net手册中PDO::PARAM_*描述的常量定义传递的数据类型
| 归档时间: | 
 | 
| 查看次数: | 39166 次 | 
| 最近记录: |