为了账号安全,请及时绑定邮箱和手机立即绑定

PDO bindParam与执行

PDO bindParam与执行

PHP
30秒到达战场 2019-12-26 14:04:27
我经常看到使用PDO 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?
查看完整描述

3 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

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)代码来更好地编码,以便在参数声明中显式定义数据类型。


查看完整回答
反对 回复 2019-12-26
  • 3 回答
  • 0 关注
  • 484 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信