bindParam 和 bindValue 有什么区别?

2022-08-30 05:54:53

答案 1

PDOStatement::bindParam 的手动输入

[与]与 不同,变量被绑定为引用,并且只在调用时被计算。bindParamPDOStatement::bindValue()PDOStatement::execute()

例如:

$sex = 'male';
$s = $dbh->prepare('SELECT name FROM students WHERE sex = :sex');
$s->bindParam(':sex', $sex); // use bindParam to bind the variable
$sex = 'female';
$s->execute(); // executed with WHERE sex = 'female'

$sex = 'male';
$s = $dbh->prepare('SELECT name FROM students WHERE sex = :sex');
$s->bindValue(':sex', $sex); // use bindValue to bind the variable's value
$sex = 'female';
$s->execute(); // executed with WHERE sex = 'male'

答案 2

以下是我可以考虑的一些:

  • 使用 ,您只能传递变量 ;不是值bindParam
  • 使用 ,您可以传递两者(显然,值和变量)bindValue
  • bindParam仅适用于变量,因为它允许通过“引用”将参数作为输入/输出给出(并且在PHP中值不是有效的“引用”),它对驱动程序很有用(引用手册):

支持调用将数据作为输出参数返回的存储过程,有些还支持作为输入/输出参数的调用,这些参数既可以发送数据,又可以更新以接收数据。

对于某些数据库引擎,存储过程可以具有可用于输入(从PHP到过程的值)和ouput(将存储过程的值返回给PHP)的参数;要绑定这些参数,你必须使用bindParam,而不是bindValue。


推荐